在使用shared_ptr时,我应该只使用一次shared_ptr声明,还是在传递它的地方声明shared_ptr?

Cod*_*ero 7 c++

使用时shared_ptr,我应该只使用shared_ptr一次声明,还是shared_ptr在我传递的任何地方声明?

所以在我新建实例的函数中我将它包装在一个shared_ptr但是当我从函数返回它时我也可以返回一个shared_ptr或者,使用get()on shared_ptr,只返回一个普通的指针.

所以我的问题是,我应该shared_ptr<myType>在我新实例时使用然后传递普通指针还是应该shared_ptr<myType>到处传递?

Lig*_*ica 5

创造一个shared_ptr不会在它的指针对象上灌输神奇的力量.神奇的全部都在shared_ptr- 及其副本 - 本身.如果您停止使用它,则会丢失引用计数; 更糟糕的是,因为您在某些时候使用它,所以当您不期望它时,该对象将被自动删除.

重要shared_ptr是你知道你的对象在某个地方仍在使用它时不会被破坏.

在下面的:

T* foo() {
   shared_ptr<T> sp(new T());
   return sp.get();
   // ^ the only shared_ptr<T> referencing the obj is dead;
   // obj is deleted;
   // returned pointer invalid before you can even do anything with it
}
Run Code Online (Sandbox Code Playgroud)

你的指针立即无效.

在某种情况下,您可能会提取原始指针,但这些应该很少见.如果你在你的函数知道你不需要引用计数,然后只需通过shared_ptr参照英寸