c++中的delete和delete[]

原创 2004年09月21日 13:10:00

c++中的delete和delete[]<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

昨天写了一篇关于deletedelete[]的文章,有位仁兄指出我的结论是错误的,那样的结果只会在特定的编译器程序。为了不会误导大家,文章意见删除。回家后仔细看了《Effective C++》,是我看书太不仔细了,虽然忘了那位仁兄是谁了,在这里还是谢谢你。现将《Effective C++》中正确的观点、结论摘录如下:

1.              当你使用new时,有两件事会发生。第一,内存被配置(透过函数operator new)。第二,会有一个(或以上)的constructors针对此内存被调用。当你使用delete,也有两件事发生:一个(或以上)的destructors会针对此内存被调用,然后内存被释放(透过函数operator 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的时候没有[],那么你也不应该在调用时使用[]

c++详解【new和delete】

说起new和delete,了解过c++的人应该都知道吧,它是用来分配内存和释放内存的两个操作符。与c语言中的malloc和free类似。 c语言中使用malloc/calloc/realloc/fr...
  • xxpresent
  • xxpresent
  • 2016年11月21日 09:22
  • 1660

C++中delete和delete [] 的区别

我们通常从教科书上看到这样的说明: delete 释放new分配的单个对象指针指向的内存 delete[] 释放new分配的对象数组指针指向的内存 那么,按照教科书的理解,我们看下下面的代码...
  • h_wlyfw
  • h_wlyfw
  • 2014年10月08日 21:50
  • 1340

C++ 中的 new/delete 和 new[]/delete[]深入理解

在 C++ 中,你也许经常使用 new 和 delete 来动态申请和释放内存,但你可曾想过以下问题呢? new 和 delete 是函数吗?new [] 和 delete [] 又是什么?什么...
  • zyazky
  • zyazky
  • 2016年09月22日 22:24
  • 914

C++ free与delete区别

free函数是由C语言继承而来的,是和malloc配对的,而不能和new配对。 free释放内存的和delete可以说是两套代码,它们的逻辑不同,不能混用。用new申请的就要用delete翻译,用ma...
  • u012861978
  • u012861978
  • 2014年10月24日 10:26
  • 4264

C++11中delete的使用

C++11中delete的使用
  • fengbingchun
  • fengbingchun
  • 2016年09月08日 21:15
  • 1490

【C++】 深入探究 new 和 delete

在C++中,我们应该经常会用到new、delete,它们是C++的一个关键字,同时也是一个操作符,下面我将我对这两者的了解和学习做一个总结和探讨。new和delete的全过程首先我们定义一个对象A: ...
  • codedoctor
  • codedoctor
  • 2017年07月27日 14:29
  • 607

C++11中的delete关键字

C++11 中,可在想要 “禁止使用” 的特殊成员函数声明后加 “= delete”(当然也可以声明为私有函数或者保护函数),而需要保留的加 "= default" 或者不采取操作 clas...
  • u014465639
  • u014465639
  • 2017年06月07日 10:20
  • 356

浅谈C++ delete this

1.为什么需要delete this?      delete this,可以让某种类型的对象拥有自杀的能力。有些设计模式,如状态模式,在状态转换可能需要使用delete this。  2.使用d...
  • zjq2008wd
  • zjq2008wd
  • 2013年12月26日 09:51
  • 3074

C++之delete常见错误总结

1、动态分配内存后释放了一次,再次释放 1)直接删除2次 int main() { int *a = new int(50); cout...
  • u011068702
  • u011068702
  • 2017年03月19日 21:49
  • 1257

C++的new 和 delete 操作符重载。

测试代码: // test.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include #include using name...
  • chjjunking
  • chjjunking
  • 2014年03月04日 12:16
  • 2762
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c++中的delete和delete[]
举报原因:
原因补充:

(最多只允许输入30个字)