Note of Justin

关于工作和读书的笔记

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  47 Posts :: 0 Stories :: 45 Comments :: 0 Trackbacks

留言簿(14)

搜索

  •  

积分与排名

  • 积分 - 51741
  • 排名 - 433

最新评论

阅读排行榜

评论排行榜

[原创文章欢迎转载,但请保留作者信息]
Justin 于 2009-12-10

Item16基本可以一语带过,因为讲得本来就很简单:

  • 用new分配一个内存对象时,语法格式是new a;
    用delete释放一个内存对象时,语法格式是delete a;
  • 用new分配一组内存对象时,语法格式是new a [num_of_elem];
    用delete释放一组内存对象时,语法格式是delete [] a;

不要错用了就可以。原因呢,也很简单:

new或是delete包含了两个阶段:

  • new:申请并分配内存空间;调用构造函数构造即将使用空间的对象
  • delete:调用析构函数析构使用空间的对象;释放内存

分配内存给一组对象的时候,编译器一般会在这一片内存前端(或是其他什么地方)插入一小段信息,用来标明这片内存是给多少个对象的,然后反复调用构造函数来创建这一组对象。当用delete []的时候,释放内存的操作就会以该信息为依据,反复调用对象的析构函数对这组对象进行释放。(下面的[n]就是这段信息)

[n][MEM]

而如果只是分配内存给一个对象,这段信息就不存在了。直接在这片内存上应用析构函数。

于是用delete []去释放new的内存,或是用delete去释放new []的内存,都会造成不可预计的后果。

posted on 2009-12-28 22:46 Justin.H 阅读(1318) 评论(0)  编辑 收藏 引用 所属分类: Effective C++ 炒冷饭

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理