您的位置:首页 > 其它

warning C4150: 删除指向不完整“CClient”类型的指针;没有调用析构函数

2013-08-23 23:20 246 查看
今天调试代码发现了一个很怪异的现象,delete 指针竟然没有调用析构函数,具体代码如下

class CClient;

class CClientManager
{
private:
CClientManager(void);
~CClientManager(void);

public:
static CClientManager& GetInstance();

public:
void InsertClient(CClient* pClient);
void DeleteClient(CClient* pClient);
BOOL Initialize();
BOOL Uninitialize();

private:
CRITICAL_SECTION m_cs;
list<CClient*>   m_vClients;


而在函数DeleteClient函数中我调用了delete pClient指令

编译通过,可是运行到DeleteClient函数时产生了错误,delete pClient不执行析构函数,搞得非常郁闷

反汇编代码发行根本没有调用析构函数,不解,于是认为可能在__try/__finally块中delete pClient不会调用析构函数,于是重构代码,删除

__try/__finally块,结果还是没有调用析构函数,继续郁闷,突然发现编译有一个警告,如下

warning C4150: 删除指向不完整“CClient”类型的指针;没有调用析构函数

这才是异常所在,于是将class CClient语句替换为#include "Client.h"语句,警告消失,delete pClient调用析构函数

一定要多看看编译警告啊
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐