Должны ли/умные указатели передаваться по ссылке в функциях?Должны/Могут ли интеллектуальные указатели передаваться по ссылке в функциях
Ie:
void foo(const std::weak_ptr<bar>& x)
Должны ли/умные указатели передаваться по ссылке в функциях?Должны/Могут ли интеллектуальные указатели передаваться по ссылке в функциях
Ie:
void foo(const std::weak_ptr<bar>& x)
Конечно, вы можете передать смарт-указатель на const&
.
Существует также причина сделать так:
Если функция, принимающая сказал смарт-указатель только фронт для одного принятия необработанного (наблюдения) указатель для манипулирования (потенциал) pointee.
Никогда не заставляйте никого использовать смарт-указатель для чего-либо, кроме передачи/совместного использования, они могут не управлять им тем, на кого вы настаиваете.
Во всех остальных случаях, с помощью смарт-указателя подразумевает передачи/обмен собственности и избежать дешевую копию (только тест имеет ли оно что-нибудь и подсчет ссылок, а также два экземпляра указателя) Безразлично На самом деле ты ничего не покупаешь.
В качестве пояснения: Написание 'unshared_ptr' - это просто (что делает вид, что является общим ptr для что-то, но ложь), а также обертывание другого умного указателя. Проблема в том, что, принимая определенную семантику, вы подразумеваете их использование, и полное подчинение семантике невозможно. – Yakk
Нет, если речь идет о std
умные указатели. const T &
не может передавать/владеть акциями, поэтому необработанный не-владелец T *
всегда лучше и эффективнее.
Can легко узнать, могу ли я спросить, почему вы думаете, что это не должно? – Borgleader
Возможный дубликат [Как передать интеллектуальные указатели в функции?] (Http://stackoverflow.com/questions/12519812/how-do-i-pass-smart-pointers-into-functions) – 5gon12eder
@ 5gon12eder: Почти, но не печенье. Это может/должно, вот как. – Deduplicator