为什么指向同一内存的多个共享指针会导致内存泄漏?

Man*_*yen 1 c++

我正在阅读有关共享指针的内容,本书说多个共享指针指向同一个内存是不明智的,因为如果一个shared_ptr引用计数减少到0,它将释放该内存,使另一个shared_ptr指向垃圾.

int *z = new int;
shared_ptr<int> bad1(z); 
shared_ptr<int> bad2(z);
Run Code Online (Sandbox Code Playgroud)

但是,当z的引用计数变为0时,shared_ptr是否都知道这一点?

Som*_*ude 8

这不会导致泄漏.它实际上更糟糕,因为你有两个不相关的共享指针指向同一个内存.这意味着他们都会认为他们拥有内存的所有权,并且每个人都会尝试自己释放它.

如果要将两个共享内存对象指向同一内存,则使用std::shared_ptr初始化(或赋值):

shared_ptr<int> good1(new int);
shared_ptr<int> good2 = good1;
Run Code Online (Sandbox Code Playgroud)

  • @ManhNguyen不,这就是*shared*指针的作用:它们共享一个指向同一内存区域的指针. (2认同)