c++中的new一般是什么情况下使用?
我使用qt编程,自动生成了一些代码,其中很多指针,有的用了new,有的没用,一般是哪些该用呢?我看过其他人写的代码,很多里面的new后面没有对应的delete,这是为什么...
我使用qt编程,自动生成了一些代码,其中很多指针,有的用了new,有的没用,一般是哪些该用呢?我看过其他人写的代码,很多里面的new后面没有对应的delete,这是为什么呢?
展开
4个回答
展开全部
用new来创建地址是动态创建的意思。
例如:
int *a=new int; 创建的时候是不在内存里面占用空间的。
a=b; 给a赋值时才开辟空间给a
delete 其实就是删除的意思。
例如:
delete a; 释放了a的内存,让a所占用的内存变得可用,a 不复存在
假如a已经被分配了内存空间,
如果给 a赋值后 即a=b; a原来的内存就变成悬挂的补可访问的内存空间,
所以要改变a所指向的地址前,最好把a的地址先给别人,即 temp=a;
然后再赋值 a=b; 再释放a 即delete temp;
例如:
int *a=new int; 创建的时候是不在内存里面占用空间的。
a=b; 给a赋值时才开辟空间给a
delete 其实就是删除的意思。
例如:
delete a; 释放了a的内存,让a所占用的内存变得可用,a 不复存在
假如a已经被分配了内存空间,
如果给 a赋值后 即a=b; a原来的内存就变成悬挂的补可访问的内存空间,
所以要改变a所指向的地址前,最好把a的地址先给别人,即 temp=a;
然后再赋值 a=b; 再释放a 即delete temp;
展开全部
new() 分配这种类型的一个大小的内存空间,并以括号中的值来初始化这个变量;
new[] 分配这种类型的n个大小的内存空间,并用默认构造函数来初始化这些变量;
在堆中应用时一般要free()
new[] 分配这种类型的n个大小的内存空间,并用默认构造函数来初始化这些变量;
在堆中应用时一般要free()
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
自己需要申请内存时使用。
其他人写的代码,很多里面的new后面没有对应的delete。
要么他代码有误,要么你没有找到地方。
其他人写的代码,很多里面的new后面没有对应的delete。
要么他代码有误,要么你没有找到地方。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐于2016-10-24 · 知道合伙人互联网行家
关注
展开全部
new 是申请动态存储空间
⑴new可用来生成动态无名变量,
如 int *p=new int;
int *p=new int [10]; //动态数组的大小可以是变量或常量;而一般直接声明数组时,数组大小必须是常量
又如:
int *p1;
double *p2;
p1=new int(12);
p2=new double [100];
l 分别表示动态分配了用于存放整型数据的内存空间,将初值12写入该内存空间,并将首地址值返回指针p1;
l 动态分配了具有100个双精度实型数组元素的数组,同时将各存储区的首地址指针返回给指针变量p2;
对于生成二维及更高维的数组,应使用多维指针。
以二维指针为例
int **p=new int* [row]; //row是二维数组的行,p是指向一个指针数组的指针
for(int i=0; i<row; i++)
p[i]=new int [col]; //col是二维数组的列,p是指向一个int数组的指针
删除这个二维数组
for(int i = 0; i < row;i++)
delete []p[i]; //先删除二维数组的列
delete []p;
⑵使用完动态无名变量后应该及时释放,要用到 delete 运算符
delete p; //释放单个变量
delete [ ] p;//释放数组变量(不论数组是几维)
相比于一般的变量声明,使用new和delete 运算符可方便的使用变量。
⑴new可用来生成动态无名变量,
如 int *p=new int;
int *p=new int [10]; //动态数组的大小可以是变量或常量;而一般直接声明数组时,数组大小必须是常量
又如:
int *p1;
double *p2;
p1=new int(12);
p2=new double [100];
l 分别表示动态分配了用于存放整型数据的内存空间,将初值12写入该内存空间,并将首地址值返回指针p1;
l 动态分配了具有100个双精度实型数组元素的数组,同时将各存储区的首地址指针返回给指针变量p2;
对于生成二维及更高维的数组,应使用多维指针。
以二维指针为例
int **p=new int* [row]; //row是二维数组的行,p是指向一个指针数组的指针
for(int i=0; i<row; i++)
p[i]=new int [col]; //col是二维数组的列,p是指向一个int数组的指针
删除这个二维数组
for(int i = 0; i < row;i++)
delete []p[i]; //先删除二维数组的列
delete []p;
⑵使用完动态无名变量后应该及时释放,要用到 delete 运算符
delete p; //释放单个变量
delete [ ] p;//释放数组变量(不论数组是几维)
相比于一般的变量声明,使用new和delete 运算符可方便的使用变量。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询