出于好奇而尝试了这个程序,以了解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;
答案 0 :(得分:1)
该代码中没有任何问题。这很好。
因此,无论您的编译器是否已损坏,您的开发环境是否已损坏,或者您还有其他代码未向我们展示导致崩溃的原因。