Это теоретический вопрос. Когда проект основан на интеллектуальных указателях, так что практически все классы используют их для обертывания своих элементов указателя, неуместно ли передавать обычные указатели на функции члена/не члена? Я имею в виду, это правильно, чтобы иметь функции-члены, как:Умные указатели в функциях
void Function(SomeClass* pSomeClass);
Или это всегда:
void Function(std::shared_ptr<SomeClass> pSomeClass);
Я также побродить, если есть какие-либо важные последствия (кроме стандартного сопзЬ особенности) прохождения Const ссылка:
void Function(const std::shared_ptr<SomeClass>& pSomeClass)
насчет ситуации, когда класс использует std::unique_ptr
для защиты своих членов, а также, например, указатель на I Член ts используется в функции класса private? Должна ли она быть обернута? Или это следует считать ошибкой дизайна?
Является ли функция делать что-либо с общим указателем? Или это просто разыгрывает его для использования сохраненного объекта? –
Прежде всего, вы должны в большинстве случаев смотреть на новые умные указатели с точки зрения * собственности *, а не как своего рода указатель самоочистки. Тогда, если вы используете интеллектуальные указатели, вам нужно использовать их * везде * для этого указателя, просто создание 'shared_ptr' для перехода к функции не имеет смысла. Наконец, интеллектуальные указатели должны быть переданы (или возвращены) * по значению *, в противном случае их семантика действительно не работает. –
@ Бенджамин Линдли; в большинстве случаев это просто разыгрывает его, чтобы использовать сохраненный объект. – DannyX