条款5:对应的new和delete要采用相同的形式
为什么呢?还是看测试代码吧。原理是什么,作者似乎也没说。希望写过c++编译器的高手解释一下。
#include <iostream>
struct Global
{
public:
static int g_iCount;
};
int Global::g_iCount = 0;
struct NewDeleteTest
{
public:
int i;
NewDeleteTest()
{
i = ++Global::g_iCount;
printf("NewDeleteTest() /t:%d/n", i);
}
~NewDeleteTest()
{
printf("~NewDeleteTest()/t:%d/n", i);
}
};
int main(void)
{
printf("new delete test/n");
NewDeleteTest *p1 = new NewDeleteTest;
try
{
delete p1;
}
catch(...)
{
printf("error: new delete/n");
}
p1 = NULL;Global::g_iCount = 0;
printf("/n/n");
printf("new delete[] test/n");
p1 = new NewDeleteTest;
try
{
delete [] p1;
}
catch(...)
{
printf("error: new delete[]/n");
}
p1 = NULL;Global::g_iCount = 0;
printf("/n/n");
printf("new[] delete test/n");
p1 = new NewDeleteTest[2];
try
{
delete p1;
}
catch(...)
{
printf("error: new[] delete/n");
}
p1 = NULL;Global::g_iCount = 0;
printf("/n/n");
printf("new[] delete[] test/n");
p1 = new NewDeleteTest[2];
try
{
delete [] p1;
}
catch(...)
{
printf("error: new[] delete[]/n");
}
p1 = NULL;Global::g_iCount = 0;
printf("/n/n");
return 0;
}