0
为了理解shared_ptr在原始指针上的行为,试图用好奇心来试验这个程序。我希望这个问题能够双删除,但在这里我面对其他:shared_ptr reset抛出分段错误
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,这是复位后的无效访问,因此是段错误。困惑,因为它没有打印cout消息。
cout << "count: "<< sptr1.use_count()
<< "value: "<< sptr1->a;
适用于我:http://coliru.stacked-crooked.com/a/5d0f9a81c10e187c –
当你调用'reset()',或者当'sptr2'超出范围时,你确定会发生异常吗? MyClass对象正在被删除?分段错误可能发生在其析构函数中。 –
对不起,我感到困惑。错误是在我的代码中,我正在调用类的成员使用sptr1后立即复位,这导致段错误。谢谢 – Eddy