出于好奇尝试了这个程序,以了解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 在重置后访问无效,因此出现段错误。感到困惑,因为它没有打印 cout 消息。
cout << "count: "<< sptr1.use_count()
<< "value: "<< sptr1->a;
该代码中没有问题。这是完全没问题的。
因此,要么你的编译器坏了,要么你的开发环境坏了,要么有其他代码你没有向我们展示导致崩溃的原因。