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;
该代码没有问题。完全没问题。
所以要么你的编译器坏了,要么你的开发环境坏了,要么有其他代码你没有告诉我们是崩溃的原因。
出于好奇想了解 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;
该代码没有问题。完全没问题。
所以要么你的编译器坏了,要么你的开发环境坏了,要么有其他代码你没有告诉我们是崩溃的原因。