我知道,我应该用delete []我使用后new [],所以使用auto_ptr与new []没有这样的好主意.
但是,在调试时delete [](使用Visual Studio 2005),我注意到调用进入了一个如下所示的函数:
void operator delete[]( void * p )
{
RTCCALLBACK(_RTC_Free_hook, (p, 0))
operator delete(p);
}
Run Code Online (Sandbox Code Playgroud)
这是否意味着,[]Visual C++上的语法丢失了?如果是这样,为什么?是否可以减轻开发人员记住正确语法的负担?
And*_*son 26
考虑以下代码:
class DeleteMe
{
public:
~DeleteMe()
{
std::cout << "Thanks mate, I'm gone!\n";
}
};
int main()
{
DeleteMe *arr = new DeleteMe[5];
delete arr;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果你在VS2005中运行它将打印:
Thanks mate, I'm gone!
如果您更改main()为正确遵守C++标准:
int main()
{
DeleteMe *arr = new DeleteMe[5];
delete[] arr;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它将打印:
Thanks mate, I'm gone! Thanks mate, I'm gone! Thanks mate, I'm gone! Thanks mate, I'm gone! Thanks mate, I'm gone!
不要用脚射击自己.如果你不匹配new/delete的不同风格,VS2005将不会做正确的事情.任何其他C++标准都不符合编译器.
有一些编译器魔法周围发生的operator new和operator delete(和他们的不同口味),基本通话到构建函数和dtors是幕后补充说.这种魔法取决于那些小括号[],所以不要失去它们或者你将失去魔力.
| 归档时间: |
|
| 查看次数: |
3396 次 |
| 最近记录: |