簡體   English   中英

兩個std :: shared_ptr運行時錯誤

[英]Two std::shared_ptr Runtime Error

為什么以下代碼會產生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;

現在,兩個共享指針都真正共享了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM