只是想澄清有关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;
最佳答案
在上面的代码中,如果未删除或释放objb,是否存在内存泄漏?
否。Foo
对象由obja
共享指针拥有。通过执行.get()
,您将检索“哑”,观察指针,该指针对指向对象的生存期没有任何影响。您只需要注意不要在指向的对象不再存在之后取消对它的引用,否则您将获得未定义的行为。
由于objb和obja指向同一个实例,这是否意味着不需要释放objb?
不需要刷新objb
,因为当obja
超出范围时,其析构函数将delete
拥有的对象。如果您执行delete objb
,则尝试两次删除一个对象将获得未定义行为。
上面是否与此相同:
我想有人可以这样说,是的。
关于c++ - 关于shared_ptr,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15249855/