// CVMI.cpp
static char* std1[] = {"a","b","c"};
static char* std2[] = {"1","2","3"};
CVMI::CVMI(HWND p)
{
//Does nothing.
}
// CVMI.h
const int cMaxIPAddr = 100;
class CVMI : public VMIListener
{
public:
CVMI(HWND p);
VMI vmi;
bool bOpen;
char sVoceraIPAddr[cMaxIPAddr + 1];
long iMessageID;
};
以上是我在线程中使用的类的代码并运行for循环。如果在循环中放入以下三行,那么我注意到我的记忆会从屋顶射出。
m_pVMI = new CVMI(m_hNotifyWnd);
delete m_pVMI;
m_pVMI = NULL;
我在这里做错了什么?我虽然我的删除会每次都处理内存分配。或者我是否必须在析构函数中快速释放所有资源~CVMI()? 。这是我第一次尝试对内存泄漏进行故障排除,并且成为C ++初学者并不容易。
编辑:
class VMI_API VMIListener : public Listener
{
public:
// Message acknowledgement. iAckCode is one of AC codes.
virtual void HandleAck(long iMessageID, char* sLoginID, int iAckCode) = 0;
virtual void HandleResponse(long iMessageID, char* sLoginID, char* sResponse) = 0;
virtual void HandleConnectionFailed(void) = 0;
};
答案 0 :(得分:1)
您需要检查几个地方:
使用“CVMI”的调用者。
正如您所描述的那样,没有内存泄漏,因为您有“删除”
m_pVMI = new CVMI(m_hNotifyWnd);
delete m_pVMI;
m_pVMI = NULL;
“CVMI”类
根据你的代码,你“新”编辑并立即“删除”ed并且你的构造函数什么都不做,那么这不是内存泄漏的地方。
唯一可疑的地方是“VMIListener”的构造函数或基类“Listener”(如果那个也有基类,也检查基类......),也许它分配给一个内存变量如:m_foo = new CFoo();在构造函数中;但是,如果没有为“VMIListener”(或监听器或超类)定义析构函数,则可以保证内存泄漏。
答案 1 :(得分:0)
std1
和std2
不会导致内存泄漏。它们甚至没有在上面的代码中使用,因此不清楚你的标题来自何处。对于OP注释中提到的虚拟析构函数,它完全取决于Listener
的实现是什么,因为VMIListener
和CVMI
都没有动态分配内存。