shared_ptr reset会引发分段错误

时间:2017-08-01 02:26:31

标签: c++11 segmentation-fault shared-ptr

出于好奇而尝试了这个程序,以了解shared_ptr对原始指针的行为。我希望问题可能是双重删除,但在这里我面临其他问题:

MyClass *raw_ptr = new MyClass();
shared_ptr<MyClass> sptr1(raw_ptr);
shared_ptr<MyClass> sptr2 = sptr1;
cout << sptr1.use_count() << endl; // prints 2
sptr1.reset(); // occurs Segmentation Fault here

预期行为:将计数减少到1并将控制移至下一行。

解决:实际问题是sptr1访问公共类成员MyClass :: a的下一行,它在重置后是无效访问,因此是segfault。困惑,因为它没有打印cout消息。

cout << "count: "<< sptr1.use_count() 
     << "value: "<< sptr1->a; 

1 个答案:

答案 0 :(得分:1)

该代码中没有任何问题。这很好。

因此,无论您的编译器是否已损坏,您的开发环境是否已损坏,或者您还有其他代码未向我们展示导致崩溃的原因。