c++中的delete和delete[]
c++中的delete和delete[]
  昨天写了⼀篇关于delete和delete[]的⽂章,有位仁兄指出我的结论是错误的,那样的结果只会在特定的编译器程序。为了不会误导⼤家,⽂章意见删除。回家后仔细看了《Effective C++》,是我看书太不仔细了,虽然忘了那位仁兄是谁了,在这⾥还是谢谢你。现将《Effective C++》中正确的观点、结论摘录如下:
  1. 当你使⽤new时,有两件事会发⽣。第⼀,内存被配置(透过函数operator new)。第⼆,会有⼀个(或以上)的constructors针对此内存被调⽤。当你使⽤delete时,也有两件事发⽣:⼀个(或以上)的 destructors会针对此内存被调⽤,然后内存被释放(透过函数operator delete)。
truncate delete区别  2. 如果你使⽤delete是未加括号,delete便假设删除对象是单⼀对象。否则便假设删除对象是个数组。
  3. string *stringPtr1 = new string;
  string *stringPtr2 = new string[100];
  ……
  delete stringPtr1;
  delete [] stringPtr2;
  如果你对着stringPtr1使⽤“[]”形式,其结果未定义。如果你对着stringPtr2没有使⽤“[]”形式,其结果亦未定义。犹有进者,这对内建型别如int者亦未定义,即使这类型别并没有destructors。
  4. 因此,游戏规则很简单,如果你在调⽤new时使⽤了[],则你在调⽤delete时也使⽤[],如果你在调⽤new的时候没有[],那么你也不应该在调⽤时使⽤[]。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。