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

时间:2012-02-05 19:00:16

标签: c++

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

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

所以我的问题是,我是否应该在新实例时使用shared_ptr<myType>,然后传递常规指针或者我应该在任何地方传递shared_ptr<myType>吗?

1 个答案:

答案 0 :(得分: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
}

你的指针立即无效。

在某种情况下,您可能会提取原始指针,但这些应该很少见。如果您处于知道的功能中,则不需要引用计数,那么只需通过引用传递shared_ptr