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将超出范围并将自由.由于objb和obja指向同一个实例,这意味着没有必要释放objb?
以上是否与此相同:
Foo *obja = new Foo();
Foo *objb;
objb = obja;
delete obja;
Run Code Online (Sandbox Code Playgroud)
不,没有泄漏.原始指针没有任何所有权语义,也没有get从shared_ptr增加引用计数的原始指针.
当共享指针超出示例中的范围时,指向的对象将被销毁.正如您已经注意到的那样,手动删除它会导致未定义的行为.