两个std :: shared_ptr运行时错误

时间:2014-03-25 14:00:51

标签: c++ c++11

为什么以下代码会生成SIGABRT?我认为这是shared_ptr背后的整个想法,是你可以分享所有权。

#include<iostream>
#include<memory>
void func1()
{
  int* i = new int ( 10 );
  std::shared_ptr<int> sp1 (i);
  std::shared_ptr<int> sp2 (i);
}

int main()
{
  func1();
  return 0;
}

1 个答案:

答案 0 :(得分:4)

因为您有两个不同的共享指针,每个指针都有自己的引用计数器,但指向相同的数据。

这意味着两者都会尝试删除相同的指针。

您应该使用第一个指针初始化第二个指针:

std::shared_ptr<int> sp1(new int[10]);
std::shared_ptr<int> sp2 = sp1;

现在两个共享指针都是真正共享的。