shared_ptr 重置抛出分段错误

shared_ptr reset throws segmentation fault

出于好奇想了解 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 访问 public class 成员 MyClass::a,重置后访问无效,因此出现段错误.很困惑,因为它没有打印 cout 消息。

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

该代码没有问题。完全没问题。

所以要么你的编译器坏了,要么你的开发环境坏了,要么有其他代码你没有告诉我们是崩溃的原因。