Стандарт C ++ 17 гласит:
[mem.poly.allocator.ctor]
polymorphic_allocator(memory_resource* r);
Требуется: r
не равно нулю.
Эффекты: Устанавливает memory_rsrc
в r
.
Броски: Ничего.
[ Примечание: Этот конструктор обеспечивает неявное преобразование из memory_resource*
.- конечная нота ]
Какой смысл принимать memory_resource*
вместо memory_resource&
, если "требует" В предложении упоминается, что r
должно быть ненулевым?
Руководство по стилю Bloomberg¹ рекомендует принимать аргументы, которые будут видоизменяться указателем, а не ссылкой, так что амперсанд на стороне вызывающего становится визуальным маркером длямутации.Однако в Стандарте такого прецедента нет.
По какой причине r
принимается за указатель, а не за ссылку?
¹ pmr
был стандартизирован при активном участии Bloomberg, так как компания использует модель полиморфного распределителя.