您的位置:首页 > 编程语言 > C语言/C++

C++学习笔记之1:使用相同形式的new和delete

2007-09-23 13:40 465 查看
 

HTML Tags and JavaScript tutorial

C++学习笔记之1:使用相同形式的new和delete

首先,从c到c++我们就应该抛弃malloc和free而用new和delete来代替之。
而malloc&free和new&delete的主要区别是new不但为一个对象申请了一片内存同时还会调用这个对象的构造函数,在这个构造函数里可能还会去申请内存,而malloc是不会这么智能的,free则是new的反向执行。所以明确一个问题是:
   malloc&free和new&delete不可以混用,比如用new申请而用free释放。
那么在使用new和delete还要注意些什么呢?先看一段小代码:
==C代码
    /* 申请一片内存 */
     char *p = (char *)malloc(1000);
         .
         .
         .
      free(p);
如果你沿用C语言的习惯,那么在C++的代码中应该是这样的:
     string *p = new string[1000];
      .
      .
      .
     delete p;
如果你这样的话将会造成灾难性的后果,上面的C++代码中所建立的1000个string对象只有第一个被删除,剩余的999个就不知道跑到哪里去了,这是内存泄露的典型例子,切记!那应该怎么样呢?应该用以下方式:
    delete [ ] p; 
这个方括号很重要,告诉系统你要释放的是一个数组而不是一个单一的指针。
如果你仅仅申请了一个对象,那么删除的时候应该怎么释放呢?如:
     string *p = new string;
释放时应该用
    delete p;
而不能是    delete [ ] p; 如果你加了括号则结果是不可预知的,换句话说就是什么都可能发生:)
总结一下,使用new和delete的时候一定要注意前后匹配,如果你申请的是一个数组,那么释放的时候一定要加方括号;如果你仅仅申请了一个对象,那么释放时千万不要加上方括号!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息