c++什么时候一定要用new分配堆内存

2020-11-22 20:37:23 字数 4673 阅读 2676

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是运算符,不是系统函数,他的功能是被编译器定义的。