这是严格意义上的理论问题。 当项目基于智能指针时,几乎所有类都使用它们来包装它们的指针成员,将普通指针传递给成员/非成员函数是否是一种不好的做法? 我的意思是,拥有像这样的成员函数是否正确:
void Function(SomeClass* pSomeClass);
或者它应该永远是:
void Function(std::shared_ptr<SomeClass> pSomeClass);
我还想知道传递 const 引用是否有任何重要的后果(标准 const 特性除外):
void Function(const std::shared_ptr<SomeClass>& pSomeClass)
当类使用 std::unique_ptr
来保护其成员时,例如,在类私有(private)成员函数中使用指向其成员的指针,情况会怎样?是不是也要包起来还是应该认为是设计错误?
最佳答案
如果函数只需要指向的对象并且它必须始终是有效对象,而不是 null,则通过引用传递对象(const 或 non-const,取决于通常的规则) .
如果函数只需要指向的对象,或者可选的 null,则通过原始指针(根据通常的规则,指向 const 或非常量)。
如果函数需要共享所指向对象的所有权,则按值传递 shared_ptr
。
如果函数需要修改对象的shared_ptr
句柄(例如reset
),通过非-传递shared_ptr
常量引用。
如果函数需要访问shared_ptr
句柄上的信息(如use_count
),但不应该修改shared_ptr
,传递shared_ptr
by const reference.
关于c++ - 函数中的智能指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34329099/