Правильно ли это?Передача std :: unique_ptr на вспомогательную функцию
void helperFunc(MyClass *ptr)
{
// do something with ptr,
}
unique_ptr<MyClass> p(new MyClass());
helperFunc(p.get());
или следует использовать shared_ptr для таких операций?
Это глупо. Если функция не хочет брать на себя ответственность *, почему черт является собственностью * (то есть unique_ptr) * даже в интерфейсе *? Способ использования ссылок, не связанных с владельцем, всегда заключался в том, чтобы использовать MyClass или MyClass * или варианты const. * У этого нет причин менять сейчас *. –
Вторичный. Нет ничего плохого в передаче исходных указателей. – Puppy
Единственная потенциальная проблема с исходными указателями заключается в том, что вы работаете с приложением, которое смешивает библиотеки, поддерживающие интеллектуальные указатели (и последовательно их использующие), и библиотеки, которые их не используют (поскольку они нацелены на более старый стандарт). В таком случае вы можете столкнуться с подобными функциями raw-pointer, которые могут или не могут принадлежать. См. Мое сообщение в блоге об использовании [unique_ptr use] (http://wp.me/p2Bia3-2U) – TiMoch