我正在阅读有关共享指针的内容,本书说多个共享指针指向同一个内存是不明智的,因为如果一个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是否都知道这一点?
这不会导致泄漏.它实际上更糟糕,因为你有两个不相关的共享指针指向同一个内存.这意味着他们都会认为他们拥有内存的所有权,并且每个人都会尝试自己释放它.
如果要将两个共享内存对象指向同一内存,则使用std::shared_ptr初始化(或赋值):
shared_ptr<int> good1(new int);
shared_ptr<int> good2 = good1;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
225 次 |
| 最近记录: |