use*_*283 4 c++ reference-counting shared-ptr
以下代码导致运行时错误.
每个都shared_ptr拥有相同的内存,但每个内存的数量仍然是一个.
因此,每个共享指针都是不同的,所以当它们超出范围时,它们会尝试释放块,这会导致损坏堆.我的问题是如何避免这种情况?
只想添加这样的声明
shared_ptr<int> x(p);
Run Code Online (Sandbox Code Playgroud)
不可谈判我必须申报.
#include <iostream>
#include <memory>
using namespace std;
int main ()
{
int* p = new int (10);
shared_ptr<int> a (p);
shared_ptr<int> b (p);
shared_ptr<int> c (p);
shared_ptr<int> d (p);
cout<<"Count : "<<a.use_count()<<endl;
cout<<"Count : "<<b.use_count()<<endl;
cout<<"Count : "<<c.use_count()<<endl;
cout<<"Count : "<<d.use_count()<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
eer*_*ika 10
如果您对指针拥有所有权,则可能只会从原始指针创建一个智能指针.创建智能指针后,所有权将被传递给智能指针.由于您不再拥有所有权,因此您可能无法从原始指针创建其他智能指针.
要获取已由共享指针管理/拥有的内存的共享指针,必须从现有共享指针进行复制:
shared_ptr<int> b = a;
shared_ptr<int> c = a;
// ....
Run Code Online (Sandbox Code Playgroud)
如果您只是从原始指针创建多个共享指针,那么这些共享指针都不会知道彼此的存在,并且所有这些指针都将相信该内存的唯一所有者,并且您将描述所遇到的问题.