C语言中利用库函数malloc和free来分配和撤销空间的。C++中的new与delete是运算符,不是函数,所以执行效率更高。但C++中也是可以使用malloc和free的。但是一来不方便,二来显得很low,三来有的情况会出错,比如当类A或结构体A中存在string类型变量时,对malloc申请的指针内的string类变量无法赋值,所以对A类型的指针空间就不能使用malloc来申请。之前在网上看的解释是:malloc函数无法对string类变量进行操作,所以申请空间失败,是无法进行赋值的。但可以利用构造函数来进行初始化,结构体也可以有自己的构造函数。但这样就显得多此一举。毕竟,如果用new就不存在此种顾虑。
new运算符的例子:
new int; //开辟一个存放整数的存储空间,返回一个指向该存储空间的地址。
new int(100); //开辟一个存储整数的存储空间,初始值为100,返回一个指向该存储空间的地址。
new char[10]; //开辟一个存放字符数组的空间,返回字符数组首元素的地址。
new int[5][4]; //开辟一个二维数组的空间,返回首元素的地址。
float *p=new float(3.1415); //开辟一个单精度的空间,初值为3.1415,将返回的空间地址赋予给p。
int *pia = new int[10]; // 每个元素都没有初始化
int *pia2 = new int[10] (); // 每个元素初始化为0
delete运算符一般格式:
delete p; //对变量
delete [] p; //对数组
用new分配空间时,数组无法进行初始化操作。如果因为内存不足等原因申请空间失败,会返回NULL。
用new和delete运算符实现二维
动态数组
#include<iostream>
using namespace std;
int main()
{
intM,N,T;
cin>>M>>N>>T;
if(N<=0||M>200)
return0;
int **p=new int*[M];
for(int i=0;i<M;i++)
p[i]=newint[N];
for(inti=0;i<M;i++)
for(intj=0;j<N;j++)
cin>>p[i][j];
for(inti=0;i<M;i++)
{
for(intj=0;j<N;j++)
{
cout<<p[i][j]<<"";
}
cout<<endl;
}
for(int m=0;m<M;m++)
delete[] p[m];
delete[] p;
return0;
}
用new和delete实现一维
动态数组
#include<iostream>using namespace std;int main(){ int M; cin>>M; int *p=new int[M]; for(int i=0;i<M;i++) cin>>p[i]; for(int i=0;i<M;i++) cout<<p[i]<<" "; cout<<endl; delete[] p; return 0;}
本文摘自谭浩强C++程序设计以及南华博客。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)