关闭

delete 和 delete[] 的区别

标签: deletedestructorconstructorhexc
411人阅读 评论(0) 收藏 举报
分类:
C++告诉我们在回收用 new 分配的单个对象的内存空间的时候用 delete,回收用 new[] 分配的一组对象的内存空间的时候用 delete[]。
 
    关于 new[] 和 delete[],其中又分为两种情况:
    (1) 为基本数据类型分配和回收空间;(2) 为自定义类型分配和回收空间。
    对于 (1),上面提供的程序已经证明了 delete[] 和 delete 是等同的。但是对于 (2),情况就发生了变化。
请看下面的程序。
#include <iostream>;
using namespace std;
class T {
public:
  T() { cout << "constructor" << endl; }
  ~T() { cout << "destructor" << endl; }
};
int main()
{
  const int NUM = 3;
  T* p1 = new T[NUM];
  cout << hex << p1 << endl;
  //  delete[] p1;
  delete p1;
  T* p2 = new T[NUM];
  cout << p2 << endl;
  delete[] p2;
}
 
    大家可以自己运行这个程序,看一看 delete p1 和 delete[] p1 的不同结果,我就不在这里贴运行结果了。
    从运行结果中我们可以看出,delete p1 在回收空间的过程中,只有 p1[0] 这个对象调用了析构函数,其它对象如 p1[1]、p1[2] 等都没有调用自身的析构函数,这就是问题的症结所在。如果用 delete[],则在回收空间之前所有对象都会首先调用自己的析构函数。
    基本类型的对象没有析构函数,所以回收基本类型组成的数组空间用 delete 和 delete[] 都是应该可以的;但是对于类对象数组,只能用 delete[]。对于 new 的单个对象,只能用 delete 不能用 delete[] 回收空间。
    所以一个简单的使用原则就是:new 和 delete、new[] 和 delete[] 对应使用。

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

delete 和 delete []的真正区别

c++中对new申请的内存的释放方式有delete和delete[两种方式,到底这两者有什么区别呢? 1.我们通常从教科书上看到这样的说明: delete 释放new分配的单个对象指针指向的内...
  • cbNotes
  • cbNotes
  • 2014-08-28 17:18
  • 36299

浅谈HTTP中Get、Post、Put与Delete的区别

原文地址:http://www.cnblogs.com/hyddd/archive/2009/03/31/1426026.html
  • Dancen
  • Dancen
  • 2014-07-08 20:28
  • 16118

整理:new/delete和malloc/free的区别和联系

1. malloc()函数 1.1 malloc的全称是memory allocation,中文叫动态内存分配。 原型:extern void *malloc(unsigned int num_byt...
  • bat67
  • bat67
  • 2016-07-25 11:25
  • 1308

sql中 truncate 和 delete 有什么区别

  • 2011-05-27 14:30
  • 20KB
  • 下载

sql之truncate_、delete与drop区别.pdf

  • 2011-04-22 10:01
  • 54KB
  • 下载

详解Truncate delete drop三者的区别

  • 2013-03-29 10:10
  • 4KB
  • 下载

sql之truncate、delete与drop区别

  • 2012-03-06 10:40
  • 5KB
  • 下载

free与delete的区别

原帖地址:http://hi.baidu.com/wihwtsdkunbnsyr/item/637e14dc4b269e2b38f6f78f new--------delete malloc-...
  • MySniper11
  • MySniper11
  • 2013-03-28 21:26
  • 1051

c的free和c++的delete的区别

首先free对应的是malloc;delete对应的是new;free用来释放malloc出来动态内存,delete用来释放new出来的动态内存空间。 应用的区别为: 1. 数组的时候int *p...
  • gukesdo
  • gukesdo
  • 2012-04-25 21:33
  • 22679

深度分析DROP,TRUNCATE与DELETE的区别【我的数据库之路系列】

这次特意从数据库块的层次深度分析一下DROP,TRUNCATE和DELETE的区别:      在此之前先为那些初学数据库的童鞋们阐述2个概念,如果你还没有真正理解这2个概念那也请你看完:DML...
  • fanfanyuzhui
  • fanfanyuzhui
  • 2013-10-31 16:14
  • 492
    个人资料
    • 访问:946285次
    • 积分:6284
    • 等级:
    • 排名:第4522名
    • 原创:99篇
    • 转载:63篇
    • 译文:1篇
    • 评论:78条
    最新评论