gpt4 book ai didi

c++ - 两个 std::shared_ptr 运行时错误

转载 作者:行者123 更新时间:2023-11-30 01:53:54 26 4
gpt4 key购买 nike

为什么下面的代码会产生一个 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;
}

最佳答案

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

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

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

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

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

关于c++ - 两个 std::shared_ptr 运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22636875/

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