关于shared_ptr

tam*_*olo 0 c++ pointers shared-ptr

只是想澄清一下shared_ptr

int main(){
   typedef std::tr1::shared_ptr<Foo> _foo;

   _foo obja(new Foo());
   Foo *objb = obja.get(); 

   // delete objb; //deleting objb will throw double free or corruption
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,如果未删除或释放objb,是否存在内存泄漏?最终,obja将超出范围并将自由.由于objbobja指向同一个实例,这意味着没有必要释放objb

以上是否与此相同:

Foo *obja = new Foo();
Foo *objb;

objb = obja;
delete obja;
Run Code Online (Sandbox Code Playgroud)

us2*_*012 6

不,没有泄漏.原始指针没有任何所有权语义,也没有getshared_ptr增加引用计数的原始指针.

当共享指针超出示例中的范围时,指向的对象将被销毁.正如您已经注意到的那样,手动删除它会导致未定义的行为.