情景:今天在查看别人写的代码时发现有类似如下代码:
PRINTER_INFO_4 *info4; // PRINTER_INFO_4是一个普通的结构(即没写构造和析构等函数的纯数据的struct)
info4 = (PRINTER_INFO_4*) new BYTE[dwNeeded];
delete []info4; // 好奇这一句的写法, 究竟是delete 还是delete[] 才对呢。。
经过我对delete 和delete[]的断点发现,
voidoperatordelete[](void *p )
{
RTCCALLBACK(_RTC_Free_hook, (p, 0))
operatordelete(p);
}
可知,operatordelete[] 函数也调用operatordelete 来实现。。 也就是说delete[] 和delete 在没有涉及到析构函数的时候.. 它们的行为是一样的。。所以上面的一行写成delete info4 也不会有内存泄露。
补充:
classCTest
{
public:
inta[4];
public:
CTest()
{
cout <<"CTest()... " <<endl;
}
~CTest()
{
cout <<"~CTest()... " <<endl;
}
};
int_tmain(intargc,_TCHAR*argv[])
{
CTest*pTest =NULL;
pTest = (CTest*)newA[4];
cout <<endl <<" ================ " <<endl;
delete []pTest;// delete pTest;
cout <<"@@@@@@@@@ " <<endl;
return 0;
}
可知,用new[] 分配的还是得用delete[] 来释放,,即使有时用delete能释放内在不泄露,但是良好的习惯还是得养成。。
相关:
http://msdn.microsoft.com/zh-cn/library/974tc9t1.aspx
http://bbs.csdn.net/topics/350243617
注:本文没有实际价值,纯作好奇学习下。。