64,654
社区成员
发帖
与我相关
我的任务
分享
class SingleLock
{
public:
SingleLock();
~SingleLock();
CSingleLock* getLock();
static SingleLock* getInstance();
private:
CCriticalSection m_CritSection;
CSingleLock* psingleLock;
static SingleLock* m_instance;
};
#include "stdafx.h"
#include "SingleLock.h"
SingleLock* SingleLock::m_instance=NULL;
SingleLock* SingleLock::getInstance()
{
if(m_instance==NULL)
{
m_instance=new SingleLock();//内存泄露
}
return m_instance;
}
SingleLock::SingleLock()
{
psingleLock=new CSingleLock(&m_CritSection);//内存泄露
}
CSingleLock* SingleLock::getLock()
{
return psingleLock;
}
SingleLock::~SingleLock()
{
if(psingleLock!=NULL)
{
delete psingleLock;
}
}
class SingleLock
{
public:
~SingleLock();
CSingleLock* getLock();
static SingleLock* getInstance();
private:
SingleLock();//构造函数必须是私有的
CCriticalSection m_CritSection;
CSingleLock* psingleLock;
static SingleLock* m_instance;
};
整个程序的构造函数不变,析构函数应该是
CTheSecondProgramDlg::~CTheSecondProgramDlg(CWnd* pParent /*=NULL*/)
{
delete SingleLock::getInstance();
}
这样整个程序运行下来就没有内存泄露了。
不知道理解的对不对,反正程序能正常运行了。相比我的水平来说算是大神,因为他当着我的面不到一分钟就写出来了。现在基本确定是析构函数的问题。 你确定写这代码的是大神?这样的话,析构函数应该怎么写?i=new()j;j=new()k;
你确定写这代码的是大神?
i=new()j;j=new()k;
这样的话,析构函数应该怎么写?CTheSecondProgramDlg::CTheSecondProgramDlg(CWnd* pParent /*=NULL*/)
{
SingleLock::getInstance();
}
析构函数这样写SingleLock::~SingleLock();
提示错误:“SingleLock::~SingleLock”: 非静态成员函数的非法调用m_instance是不是也要在析构函数里delete啊SingleLock::~SingleLock() { if(psingleLock!=NULL) { delete psingleLock; } if(m_instance!=NULL) { delete m_instance; } }
SingleLock::~SingleLock()
{
if(psingleLock!=NULL)
{
delete psingleLock;
}
if(m_instance!=NULL)
{
delete m_instance;
}
}