引用计数在shared_ptr中不起作用

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)

如果您只是从原始指针创建多个共享指针,那么这些共享指针都不会知道彼此的存在,并且所有这些指针都将相信该内存的唯一所有者,并且您将描述所遇到的问题.