class CMessage
{
public:
CMessage(void);
~CMessage(void);
.......
protected:
TCHAR *m_pData;
.........
}CMessage::CMessage(void)
{
m_pData = NULL;
}CMessage::~CMessage(void)
{
if(m_pData) delete []m_pData;
delete this;
}
void CDlg::OnBnClickedBtn()
{
CMessage *pMsg;
pMsg = new CMessage;
......
delete pMsg; ----> CMessage 类的析构函数中有了{delete this}, {delete pMsg;}这句要不要?}
解决方案 »
- vc中为什么创建多线程会导致debug版本的exe运行有问题而release版本的exe没问题呢
- [Help]端口映射及通过ActiveX控件广域网内访问视频流问题。。。。
- 求ZgChart源码
- 请问高手socket1.0在连接没有丢失的情况下,出现数据传输不稳定的情况,如何解决,小弟在线等待!
- 如何根据线程句柄获得线程id
- 关于制作专用格式的软件的问题!
- 如何覆盖文本文件中的一行。(在线等待)。
- PB + SQL SEVER OR VC++ + SQL SEVER开发数据库怎样啊?
- 不能编译怎么办?
- 请教!如何运行WINDOWS程序?
- 阻塞connect怎么设置超时?
- 怎么在MFC中查看其他设备IP是否连通
delete本来就是要调用析构函数的
你在析构函数里面调用当然没用了,
还有可能有问题呢
这种写法是很错误的
如果是个局部变量,分配在栈上。
等生命周期结束时调用析构delete
会出现异常
delete只能释放堆上动态分配的内存。
你不能保证类对象的内存分配方式。
当时见那个类比较复杂,静态成员比较多,具体的不记得了
不过一般情况下是用不到的
开放一个释放成员函数调用delete this;
但delete this 放在析构函数中还是不对的,在调用operator delete之前进析构,这样造成了一个死循环。
下面是示例代码,最后造成堆栈溢。
int g_icount = 0;class A
{
public:
~A()
{
cout<<g_icount++<<endl;
delete this;
}
private:
int m_idata;
};
int _tmain(int argc, _TCHAR* argv[])
{
A* la = new A;
la->~A();
}