一、程序突然挂了,没报出错信息
现场:在运行一段代码,前几次成功运行,后面突然就死掉了,没有进入到do_something()函数中就中断了。检查content的内存也没有被破坏。
class myclass{
public:
...
void fun();
Content * content;
...
}
...
void myclass::fun(){
...
content_->do_something(return, request);
...
}
原因:content_这个成员变量是一个单例对象,所有myclass的对象共用一个content,而我在myclass的析构函数中执行delete语句,将content_这个单例对象释放了,导致一旦一个myclass的对象析构,将导致其它myclass对象的成员content_内存无效,虽然content_的内存没有破坏(还没来得及破坏),但是该地址已经无效,导致最终出错。
总结:写c++程序要注意在析构函数中释放资源,但是要注意,如该成员是一个指向单例的指针,不能随便释放,否则引起出错。
二、
本文探讨了在C++编程中使用单例模式时可能遇到的问题。具体分析了一个实例,即在析构函数中错误地删除了单例对象,导致其他对象引用的单例内存无效,进而引发程序崩溃。强调了在析构函数中释放资源时需谨慎对待单例对象。

8188

被折叠的 条评论
为什么被折叠?



