Смарт-указатели, как правило, крошечные, поэтому передача по значению не является проблемой, но есть ли какие-либо проблемы с передачей ссылок на них; или, вернее, существуют конкретные случаи, когда это не должно быть сделано?Передача интеллектуальных указателей по ссылке
Я пишу библиотеку обертки, а некоторые из моих классов переносят объекты smart-pointer в базовую библиотеку ... мои классы не являются умными указателями, но API в настоящее время передают объекты интеллектуального указателя по значению.
например текущий код:
void class::method(const AnimalPtr pAnimal) { ... }
становится
void class::method(const MyAnimal &animal){...}
где MyAnimal
мой новый класс обертка герметизирующего AnimalPtr
.
Нет гарантий, что классы Wrapper ни в коем случае не будут расти за пределы смарт-указателя, поэтому переход по значению заставляет меня нервничать.
В целом, хранение ссылок на интеллектуальные указатели не является хорошей идеей, но передача ссылки на нее, когда вы знаете, что она не будет сохранена, обычно нормально, см. Например, этот вопрос: http: // stackoverflow.com/questions/179105/why-shouldnt-you-use-references-to-smart-pointers – confusopoly