1楼:砍侃看
一是需要一块大内存的时候,一般栈的大小在8m左右(具体看编译器,不过一般都不会太大),所以需要大内存时需要new。
二是给全局或作用域较大的指针分配对象时。
三是一般自定义的类对象用new,也不是必须用new。
以上是我个人的体会,不一定很准确,仅作参考。
2楼:幻梦·人生
new是c++语法所规定的堆分配空间函数。
malloc是c语法所规定的对分配空间函数。
差别在于,c++是面向对象进行编程的。由于对象是包含构造函数的,在创建对象时,应当调用其构造函数,对其内部的数据进行初始化。new可以在分配空间的同时调用构造函数对此段空间进行初始化。
而malloc只能够分配一段空间,不能调用构造函数。
所以在c++语言的开发中,要求使用new操作符进行堆空间的分配。
c++什么时候用new,什么时候不用new
3楼:砍侃看
new和不new的区别是类型分配的内存位置。
不new的类型对象内存分配是在栈区,这个地方比较小,一般只有几m的空间。一般对于内置类型比如int、char等如果需要的内存不多的情况下,可以不用new。这时候的内存会在当前函数结束后自动释放。
需要new的时候一般对于复杂类型,这时候内存分配是在堆区。比如自定义的类类型,或者需要大量内存空间的时候,比如你需要一个10000个int的数组,这时候你就需要new一下了。new的对象内存是需要我们手动释放的,否则会造成内存泄露。
以上是我的个人理解,仅供参考。
4楼:匿名用户
创建不在栈上的新对象都应该用new
在c++中,释放new分配的内存空间时,使用delete和delete[]是不是有区别?详细说明下
5楼:匿名用户
c++告诉我们在**用 new 分配的单个对象的内存空间的时候用 delete,**用 new 分配的一组对象的内存空间的时候用 delete。
楼主的这个问题提得很好。很多人注意到了这个问题,但是却不清楚为什么要这样做,不这样做行不行。
关于 new 和 delete,其中又分为两种情况:(1) 为基本数据类型分配和**空间;(2) 为自定义类型分配和**空间。
对于 (1),上面提供的程序已经证明了 delete 和 delete 是等同的。但是对于 (2),情况就发生了变化。请看下面的程序。
#include ;
using namespace std;
class t
~t()
};int main()
大家可以自己运行这个程序,看一看 delete p1 和 delete p1 的不同结果,我就不在这里贴运行结果了。
从运行结果中我们可以看出,delete p1 在**空间的过程中,只有 p1[0] 这个对象调用了析构函数,其它对象如 p1[1]、p1[2] 等都没有调用自身的析构函数,这就是问题的症结所在。如果用 delete,则在**空间之前所有对象都会首先调用自己的析构函数。
基本类型的对象没有析构函数,所以**基本类型组成的数组空间用 delete 和 delete 都是应该可以的;但是对于类对象数组,只能用 delete。对于 new 的单个对象,只能用 delete 不能用 delete **空间。
所以一个简单的使用原则就是:new 和 delete、new 和 delete 对应使用
6楼:匿名用户
如果new得是一个变量,那么使用delete就可以。
但是如果new得是一个数组,使用delete的话只能释放数组的第一个元素占用的内存,这会造成严重的内存泄漏的。
使用new申请的数组应该使用delete来销毁它。
7楼:匿名用户
delete一般只释放用new所分配的,并且只分一个类型的大小的内存,每个delete和new对应;而delete释放用new所分配的,并且为同一种类型的多个元素一次所分配的内存。也就是用new一次为一个元素分配内存时,用delete;而用new一次为一个集合(数组)分配内存时,用delete。如char *p=new char时用delete p;youclass *pclass=new youclass时用delete pclass;又如用char *p=char[10]时用delete p;youclass *pclass=new youclass[10]时用 delete *pclass;
8楼:匿名用户
delete 是销毁一个变量!delete 是销毁一个变量数组
c++中,new申请的是堆内存,是在近堆中还是远堆中申请?请帮忙解释原因,多谢~
9楼:匿名用户
看大小吧。而且这个大小要看cpu位数。对于16位cpu来说,一般来说段地址寄存器是16位的,所以2的16次方就是64k。
在这个大小内,一般申请的内存都是在程序的同一段内存内的,访问这块内存只用段寄存器就够了。如果很大的话,就要用段地址+偏移地址。就是远堆了。
现在的cpu都老牛逼了,32位的寄存器,都不分远近了。
c++里面创建对象,什么时候应该用new什么时
10楼:匿名用户
void func()
void main()
void main()
c++里面, 创建对象, classname object(初始化参数);在stack栈里面分配空间,自动释放。
或者用 classname object=new classnam();在heap堆里面分配空间,要手动释放。
当你不确定需要多大的时候用new
类里面用new实现多态, 有的时候解决类
接口也用new, 这个一下说不清楚
用new有一定内存泄露的风险, 可以考虑用
1:声明分配内存是在编译阶段进行的,new分配内存是在运行阶段进行的
2:声明被放在栈中,new被分配在堆中或自由存储区中
3:声明创建数组,在编译阶段是就为他分配内存。
new创建在运行阶段 需要创建时就创建,不需要创建时还可以在运行时选择数组长度,
这就是因为int i;cin>>i;int a[i];不成功的原因,因为a[i]要在编译阶段就分配好内存,但是i在运行时才能知道
int i;cin>>i;int * a=new int[i];这样可以,因为都是在运行阶段才进行。
11楼:匿名用户
凡是c++就只用new吧。免得混着用,容易出错。
c++中什么数据分配在栈或堆中,new分配数据是在近堆还是远堆中?
12楼:匿名用户
1,栈: 存放局部变量,函数调用参数,函数返回值,函数返回地址。由系统管理
2,堆: 程序运行时动态申请,new 和 malloc申请的内存就在堆上
c++中,使用new的意义?为什么要使用堆? 这样做的意义是什么,使用栈不是更好? 在何种情况下使
13楼:匿名用户
使用new的意义是申请堆空间(heap)中的内存。
heap比起栈空间(stack)的优势在于容量巨大,通常一个程序的stack空间的大小都只有2m左右,具体数值取决于编译器。
使用heap需要手动释放内存,但是随时可以释放,使用stack必须等到生命周期结束才会释放内存。
对于生命周期短且占用空间小的变量,如函数中的局部变量,用stack。对于占用空间大的,采用heap。熟悉了c++之后自然就分得清什么时候该用什么。
比起stack,heap能有更大的容量,并且能更好地被程序员操纵。
c++new可以为哪些类型分配内存
14楼:匿名用户
可以任何类型,包括基础类型、结构体、枚举、联合体、类(包括库和自定义)
********************
*a.name 运算符顺序错误,应该是(*a).name或者直接写成a->name,其他成员同理
15楼:匿名用户
可以为任何类型分配内存空间,但是有些类型的new运算符被重载了,具体的分配行为依赖于重载函数定义。
16楼:匿名用户
任何类型都可以,基础类型、结构体、枚举、联合体、类(包括库和自定义),想怎么申请都可以,呜呜呜
既然是指针 你就不要用(对象点)去指向各个成员变量,那是不对的,我给你改的!
#include
#include
#include
using namespace std;
struct pizza
;int main()
17楼:匿名用户
可以,new 与malloc 区别在于new要调用构造函数,所有结构、类都有构造函数(默认或自定义)
18楼:夏至灬樱花祭
可以,new是开辟地址空间,能用于所有类型,使用之后记得delete
19楼:匿名用户
可以给自定义的结构体,自定义的类分配空间。
20楼:匿名用户
可以的。可以为任何类型分配内存空间,new是运算符,不是系统函数,他的功能是被编译器定义的。