【发布时间】:2013-08-29 17:49:46
【问题描述】:
我有一个如下的单例类:
class myClass
{
public:
static myClass* getInstance();
~myClass();
private:
static myClass* m_instance;
protected:
myClass();
};
对于上面的类定义是:
myClass* myClass::m_instance = 0;
myClass::myClass()
{
}
myClass::~myClass()
{
}
myClass* myClass::getInstance()
{
if(m_instance == 0)
m_instance = new myClass;
return m_instance;
}
众所周知,一旦使用new 分配内存,就应该将其释放到堆中以防止内存泄漏。就我而言,我分配了与析构函数无关的内存,因为它是静态的。
那么,我怎样才能释放分配的内存呢?我应该完全释放它吗?这会不会导致内存泄漏,因为我还有其他类的对象也在 main() 中起作用?
PS:getInstance() 方法返回的对象存在于main() 中,直到应用程序关闭。
【问题讨论】:
-
或者你可以注册一个函数到
atexit()函数。 -
假设您在为每个进程提供单独内存空间的操作系统上运行(即现在几乎所有现代操作系统),这种情况下的“内存泄漏”是无关紧要的,因为在 main 之后() 返回,进程分配的所有内存无论如何都会被操作系统回收。唯一可能产生影响的情况是 ~myClass() 是否需要在进程空间之外进行一些清理工作(例如,从 /tmp 中删除文件或其他内容)。假设情况并非如此,最简单的解决方案就是忽略该问题,因为它不会给您带来任何问题。
标签: c++ memory-management