龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

经验分享 从C到C++(一)(1)(3)

时间:2011-04-12 23:18来源:未知 作者:admin 点击:
分享到:
5. new delete 许多C用户肯定不会忘记alloc()和free()函数族,它们曾经为动态内存分配与释放的操作做出了很大的贡献,如: char *cp=malloc( sizeof ( char ));

5. new delete

许多C用户肯定不会忘记alloc()和free()函数族,它们曾经为动态内存分配与释放的操作做出了很大的贡献,如:

  1. char *cp = malloc(sizeof(char));  
  2. int *ip=calloc(sizeof(int) 10);  
  3. free(ip);  
  4. free(cp);  

C++允许用户使用这些函数,但它同时也提供了两个类似的操作符new和delete,它们分别用来分配和释放内存,形式如下:

  1. p = new TYPE;  
  2. delete p; 

因此以上的cp操作可改版为:

  1. char*cp=new char;  
  2. delete cp; 

new delete操作符同样亦可作用于C中的结构变量,如:

  1. struct COMPLEX*cp = new struct COMPLEX;  
  2. delete cp; 

当不能成功地分配所需要的内存时,new将返回NULL.对于字符型变量可以如下初始化:

  1. char ch('A'); //char ch='A' 

对应地,new可以同时对变量的值进行初始化,如:

  1. char p=new char ('A‘); //cp='A' new 

不需要用户再使用sizeof运算符来提供尺寸,它能自动识别操作数的类型及尺寸大小,这虽然比malloc)函数聪明不了多少,但起码使用起来会比它方便得多。当然,正如calloc()函数,new也可以用于数组,形式如下:

  1. p = new TYPE[Size] ; 

对应的内存释放形式:

  1. delete [] p; 

同理首例中ip操作可以改版为:

  1. int * ip=new int[10];  
  2. delete [] ip; 

用new分配多维数组的形式为:

  1. p = new TYPE [c0] [c1]…… [cN]; 

从来没有太快活的事情,例如以下使用非法:

  1. int***ip2=(int***)new int[m] [n][k]; 
  2. //error. Constant expression required int***ip 1=(int***)new int[m][2][81; //ok  

C++最多只允许数组第一维的尺寸(即c0)是个变量,而其它的都应该为确定的编译时期常量。使用new分配数组时,也不能再提供初始值:

  1. char*String =new char[ 20] ("Scent of a Woman");   
  2. //error: Array allocated using 'new' may not have an initializer  


精彩图集

赞助商链接