只是想澄清一下 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 将超出范围并自行释放。由于 objb 和 obja 指向同一个实例,这是否意味着不需要释放 objb?
上面是不是和这个一样:
Foo *obja = new Foo();
Foo *objb;
objb = obja;
delete obja;
最佳答案
不,没有泄漏。原始指针没有任何所有权语义,get
从 shared_ptr
获取原始指针也不会增加引用计数。
在您的示例中,当共享指针超出范围时,指向的对象将被销毁。正如您已经注意到的,手动删除它会导致未定义的行为。
关于c++ - 关于 shared_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15249855/