为什么以下代码会生成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;
}
答案 0 :(得分:4)
因为您有两个不同的共享指针,每个指针都有自己的引用计数器,但指向相同的数据。
这意味着两者都会尝试删除相同的指针。
您应该使用第一个指针初始化第二个指针:
std::shared_ptr<int> sp1(new int[10]);
std::shared_ptr<int> sp2 = sp1;
现在两个共享指针都是真正共享的。