Vio*_*ffe 8 c++ delete-operator
我记得在某个地方读过delete NULL要在C++中成为有效的操作是必要的,但是我不能记得为什么它应该如此.有人请提醒我吗?
Ed *_* S. 11
该规则并非绝对必要,因为没有它,语言可能存在; 这只是标准委员会做出的决定.空指针不是有效的内存地址.但是,我想相信每个决定都是出于某种原因,这些理由值得了解.
此规则简化了失败案例的管理以及指针可能为null的其他实例.这是一个简单,便宜的检查,它为语言增添了明显的便利.
例如,如果存在许多可能导致动态内存分配的条件,但是其他条件也不存在,那么只需坚持delete最后并且不用担心它就很方便.
// contrived example
void foo(int n) {
char *p = nullptr;
switch(n) {
case whatever:
case something_else:
p = new char[n];
break;
}
// some code...
delete [] p; // look Ma, no check!
}
Run Code Online (Sandbox Code Playgroud)
如果delete nullptr是非法的,那么每次打电话delete都会被...包围
if(ptr)
Run Code Online (Sandbox Code Playgroud)
......那会很蹩脚.既然这是常态,一个基本上是强制性的约定,为什么不只是消除完全检查的需要?为什么每次通话都需要额外的5个字符(最少)delete?