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

原创 2007年09月23日 13:40:00
 

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的时候一定要注意前后匹配,如果你申请的是一个数组,那么释放的时候一定要加方括号;如果你仅仅申请了一个对象,那么释放时千万不要加上方括号!


对应的new和delete要采用相同的形式

下面的语句有什么错? string *stringarray = new string[100]; ... delete stringarray; 一切好象都井然有序...
  • a20102110080212
  • a20102110080212
  • 2013年05月20日 22:07
  • 488

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

测试代码: // test.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include #include using name...
  • chjjunking
  • chjjunking
  • 2014年03月04日 12:16
  • 2647

C++new和delete实现原理

new操作 delete操作 new[]操作 delete[]操作
  • passion_wu128
  • passion_wu128
  • 2014年09月01日 02:01
  • 10499

C++开发DLL中使用new和delete注意事项

报错情况: 1,在 DLL 中用 new 来创建宿主程序中的对象,然后把这个对象指针保存到宿主程序,当 DLL 被卸载后,凡是涉及到这个指针的调用都会报错,包括 delete 这个指针也会有错。 ...
  • dodott
  • dodott
  • 2016年11月11日 18:26
  • 1076

c++的new和delete的方法使用以及不用new定义变量

new和delete运算符用于动态分配和撤销内存的运算符 new用法:           1.     开辟单变量地址空间                1)new int;  //开辟一个存...
  • uestcyao
  • uestcyao
  • 2014年03月24日 16:44
  • 6487

重载new和delete的一些规则

重载new和delete的一些规则重载new和delete的一些规则 一般规则 特殊规则1 特殊规则2 特殊规则3 new和delete重载实例 直接获取当前的new_handler 转载请注明出处参...
  • sanoseiichirou
  • sanoseiichirou
  • 2015年11月20日 23:18
  • 1246

C++的new、delete及其内存管理

代码写多了,就麻木了。new和delete很好用,平时用的时候没想太多。但如果“想太多”就会引发出很多东西。 new和delete跟sizeof一样,是操作符,关键字,而不是函数。new和dele...
  • Kelvin_Yan
  • Kelvin_Yan
  • 2015年01月13日 11:11
  • 1263

c++详解【new和delete】

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

为什么new/delete和new[]/delete[]必须配对使用?

为什么new/delete和new[]/delete[]必须配对使用?new和delete的内部机制这里不赘述了,戳这里《浅谈 C++ 中的 new/delete 和 new[]/delete[]》 ...
  • my_live_123
  • my_live_123
  • 2016年12月25日 21:49
  • 878

第16条:成对使用的new和delete时要采取相同形式

请观察下面的代码有什么不妥之处: std::string *stringArray = new std::string[100]; ... delete stringArray; 似乎没问题, new...
  • lsfreeing
  • lsfreeing
  • 2014年12月11日 14:48
  • 214
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++学习笔记之1:使用相同形式的new和delete
举报原因:
原因补充:

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