gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 14:58:03 27 4
gpt4 key购买 nike

我正在阅读有关共享指针的书,这本书说,有多个共享指针指向同一内存是个坏主意,因为如果一个shared_ptr引用计数减少到0,它将释放该内存,从而使另一个shared_ptr指向垃圾。

int *z = new int;
shared_ptr<int> bad1(z);
shared_ptr<int> bad2(z);

但是,当z的引用计数变为0时,两个shared_ptr都不知道吗?

最佳答案

那不会造成泄漏。实际上,这要糟糕得多,因为您有两个指向同一内存的不相关的共享指针。这意味着双方都将认为自己拥有该内存的所有权,并且每个方都将尝试自己释放该内存。

如果要两个共享内存对象指向同一内存,请使用std::shared_ptr初始化(或分配):

shared_ptr<int> good1(new int);
shared_ptr<int> good2 = good1;

关于c++ - 为什么指向同一内存的多个共享指针会导致内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60379570/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com