C ++ 17标准说:
polymorphic_allocator(memory_resource* r);
要求:
r
不为空。效果:将
memory_rsrc
设置为r
。抛出:没事。
[注意:”此构造函数提供从
memory_resource*
的隐式转换。 — 尾注]
如果“ requires” 子句提到memory_resource*
必须为非空,那么接受memory_resource&
而不是r
有什么意义?>
Bloomberg¹样式指南鼓励接受将要通过指针而不是引用进行突变的参数,以便调用方的“&”号成为可见的突变标记。但是,标准中没有此类先例。
r
被用作指针而不是参考的原因是什么?
¹pmr
被彭博社大量参与标准化,因为该公司使用多态分配器模型。
答案 0 :(得分:7)
请注意,设计内存资源库是为了使
ShoppingList
构造函数接受指向memory_resource
的 pointer 而不是接受指向 的memory_resource
。有人指出,一种常见的做法是在空指针超出约定的情况下使用引用而不是指针。但是,还有一种更引人注目的实践,那就是避免使用通过引用获取对象并存储其地址的构造函数。我们还希望避免传递非const引用,因为通常也将其视为不好的做法(在重载运算符中除外)。