问题:如果一个单例类具有程序范围(在程序启动时出现并在程序结束时死亡),我应该编写析构函数吗?
详情:
我在犹豫中:
"我是否应该为单例类编写析构函数?"
1)此类具有程序范围
2)类在堆上使用了大量内存,因此释放内存需要时间
当用户退出程序时,响应应该很快,所以为什么要花时间释放由此单例占用的内存,因为内存将在程序结束时释放。
main()
函数返回后调用静态对象的析构函数)。如果一些在单例中分配的对象也锁定资源,则也适用于此!因此,在大多数情况下,最好实际上编写此类对象的析构函数,并使其可选地释放内存。
MySingleton::~MySingleton()
{
#ifndef RELEASE
// The memory will be released by OS when program terminates!
delete ptr1;
delete ptr2;
#endif
}
MySingleton::~MySingleton()
{
// We don't do anything here.
// The memory will be released by OS when program terminates!
}
但是析构函数更好地保持了持久性。
C++语言不能保证程序终止时内存会被回收,但是任何一个像样的操作系统都可以轻松完成这个任务。
所以,如果:
那么,你可以省略析构函数,泄漏内存,并依靠操作系统在你之后清理它。
显然,这样做的明显缺点是各种调试工具可能会大声疾呼地指出内存泄漏问题。
当然,一个稍微更基本的问题是:为什么要创建一个分配如此大的内存的单例?
我认为这听起来是可怕的设计。
这样它就有两次机会去做对。
wait()
调用的快速响应? - P Shved