我有一些"全局"构造,分配了新的,并且在整个应用程序生命周期中都是活跃的.
在应用程序完成之前,我是否应该在指针上调用delete?是否所有应用程序内存在关闭后都不会被回收?
编辑清晰度.我只是在谈论不会为程序关闭时"死"的生命对象调用delete.
sha*_*oth 25
从技术上讲,是的,内存被回收.但除非您使用delete这些对象的析构函数,否则不会运行它们的副作用.这可能会导致临时文件未被删除或数据库更改未提交,具体取决于这些析构函数的用途.
也别忘了墨菲.现在,在您描述时使用管理这些对象的代码(对象必须在程序的生命周期内持久存在),但稍后您可能希望重用代码以使其多次运行.除非它可以正确地处理重新创建对象,否则它将泄漏对象.
不,不要编写/调试/维护代码来执行操作系统已经非常擅长的事情。
除非有相反的具体原因(例如,要提交的未完成事务、要刷新的文件、要关闭的连接),否则我不会编写代码来执行操作系统无论如何都会执行的操作。如果 dtor 没有做任何特别的事情,为什么还要调用它呢?
许多开发人员投入了大量精力来在应用程序关闭时删除/销毁/释放/终止内容 - 付出大量努力以避免来自内存管理器的应用程序关闭时出现一些虚假的“泄漏报告”,而内存管理器本身即将被销毁。