为什么`polymorphic_allocator`需要`memory_resource`指针而不是引用?

Vit*_*meo 10 c++ allocator language-lawyer c++17

C ++ 17标准说:

[mem.poly.allocator.ctor]

polymorphic_allocator(memory_resource* r);
Run Code Online (Sandbox Code Playgroud)
  • 要求: r非空。

  • 效果:设置memory_­rsrcr

  • 抛出:没事。

  • [?注意:此构造函数提供的隐式转换memory_­resource*。-?尾注?]

如果“ requires”子句提到必须为非null ,那么接受a memory_resource*而不是a memory_resource&的意义何在?r

彭博(Bloomberg¹)风格指南鼓励接受将要通过指针而不是引用进行突变的参数,以便调用方的“与”号成为可见的突变标记。但是,标准中没有此类先例。

r被视为指针而不是参考的原因是什么?


¹ pmr与重彭博参与规范,因为该公司采用的是多态的分配模式。

Lan*_*yer 7

N3916

请注意,存储资源库的设计,这样的ShoppingList构造函数接受一个指针memory_resource,而不是一个参考memory_resource。有人指出,一种常见的做法是在空指针超出约定的情况下使用引用而不是指针。但是,还有一种更引人注目的实践,那就是避免使用通过引用获取对象并存储其地址的构造函数。我们还希望避免传递非const引用,因为通常也将其视为不好的做法(在重载运算符中除外)。