c++ - 关于 shared_ptr

标签 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;
}

在上面的代码中,如果objb 没有被删除或释放,是否会发生内存泄漏?最后,obja 将超出范围并自行释放。由于 objbobja 指向同一个实例,这是否意味着不需要释放 objb

上面是不是和这个一样:

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

objb = obja;
delete obja;

最佳答案

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

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

关于c++ - 关于 shared_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15249855/

相关文章:

C++ 将逻辑运算符函数分配给变量

c++ - 在字符串 vector 中创建 20,000 个 MAC 地址

c++ - 为什么 opengl 着色器没有编译?

c++ - 通过取消引用 boost::shared_ptr 找不到派生类的方法

c++ - 为什么我的 shell 只检测 0 - 255 之间的返回码?

c++ - 指针的第一个元素被污染了 C++

programming-languages - 什么是指针?

c++ - 打破shared_ptr和unique_ptr之间的循环依赖

pointers - 垃圾收集与共享指针

c# - IntPtr 和 UIntPtr 的区别