unj*_*nj2 5 c++ arrays syntax memory-management
使用单个关键字实现删除数组难吗?效率低下吗?
R. *_*des 16
首先,让我总结两者的作用:delete为一个对象调用析构函数并释放内存; delete[]调用一些对象的析构函数并释放内存.
可以将它们折叠到同一个操作中:"调用一些对象的析构函数并释放内存." 毕竟一个是一些数字.
双方delete并delete[]在指针操作.像这个:
foo* ptr;
Run Code Online (Sandbox Code Playgroud)
仔细看看.并告诉我当我们应该调用多少析构函数delete.你不能.所以不能编译器.这只能在运行时知道.有关对象数量的信息必须存储在某处.这意味着,对于每次使用new[],都会分配一些额外的内存来跟踪该数字.
C++建立在"你不为你不使用的东西付费"的原则之上,这就是非数组形式存在的原因:因为delete总是只删除一个对象,new不需要分配任何额外的.
问题不是复杂性,而是参数为delete单个指针的事实,无论您是分配单个元素还是数组,该类型都完全相同.实现之下是完全不同的,因为销毁的元素数量不同.
这实际上是与C向后兼容的一个问题...如果从一开始就没有要求我们可能没有C++(它不会赶上这么多)但是类型new T[N]可能与类型不同的new T,并且可以使用的类型系统,以检测delete需要被调用.
这是因为C++设计的首要原则之一就是你不为你不使用的东西买单. new[]/ delete[]有额外的成本,并且有人认为他们的实用程序(我从未在25年的C++中使用过.)的限制足够有限,以至于没有理由将此成本添加到非数组new/ delete.