- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
问题:我是否应该为具有程序作用域的单例编写析构函数(程序启动时活跃,程序结束时死亡)
详细信息:
我在一个问题上进退两难
“我应该为单例类编写析构函数吗?”
1) 这个类有程序作用域2) 类在堆上使用大量内存,因此释放需要时间
当用户退出程序时,响应应该很快,那么为什么要花时间释放这个单例占用的内存,因为内存将在程序结束时释放。
最佳答案
如果释放内存需要很长时间,那就不要做。这可能是一个大而耗时的问题,尤其是在释放内存导致大量缓存未命中的情况下。操作系统将完成这项工作(当然,如果您在实际执行该工作的系统上运行)。
但是,如果您的析构函数对某些资源进行终结(例如,解锁文件或硬件),并且您使用“资源获取即初始化”,则必须确保调用正确的析构函数(例如,那些静态对象在 main()
函数返回后被调用)。 如果在您的单例中分配的某些对象也锁定资源,这也适用!
因此,在大多数情况下,实际上为此类对象编写一个析构函数并使其释放内存可选会更好。
SSS提出问题的人决定根本不写析构函数。但是,我想多说一点,这不是最好的解决方案。
不为静态对象(我们称之为“静态”)释放内存是一种非常微妙的优化,它与常识和人们通常编写程序的方式相矛盾。您的代码分配内存但没有析构函数,看起来很奇怪。同龄人会认为该类(class)写得不好,往往会在其中寻找错误(而他们在其他类(class)中)。
相反,您应该遵守通用编码标准,这些标准规定 C++ 中的内存管理应该是正确的。一定要写一个析构函数,只有在它表明它对不释放有显着提升之后,才包装代码以使其不被调用。
不释放内存的意图必须明确。
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++ - 单例的析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1481041/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!