简单的动态分配问题

时间:2010-11-29 20:56:49

标签: c++

这有什么区别: -

width = new int;

这个: -

int width;

即。第一个代码中的动态分配有什么用?

5 个答案:

答案 0 :(得分:3)

前者动态分配一个int并在内存中返回其地址(写入变量width,然后你必须在delete之后释放它。它一直存在。

后者声明了一个int类型的局部变量,当它离开当前范围时变为无效。

答案 1 :(得分:2)

你的意思可能是:

int* w1 = new int;
int  w2;

第一个是在堆上分配的,你必须使用运算符delete来处理主题。

第二个是在堆栈上,在它超出范围后不再存在(所以你不必自己处理内存)。

答案 2 :(得分:0)

一个在堆上分配,另一个在堆栈上分配,一个是你必须管理的,另一个是“自动的”,一个你通过去引用访问另一个你没有...

编辑:关于你的第二个问题,不多......有几个案例,但是你几乎总是使用智能指针,如果没有,你就是玩火......:)< / p>

答案 3 :(得分:0)

第一个为堆上的整数分配空间并分配空间以将指针保存在堆栈上。它还将width初始化为0.堆上分配的空间必须由程序员解除分配(额外负担)。只要指向它的指针可用且内存未被释放,就可以从任何地方访问堆上的这个空间。

第二个声明只是在堆栈上分配空间,并在变量超出范围时自动释放。宽度值是垃圾。

答案 4 :(得分:0)

一个 int的动态分配很少“有用”,但我不会说“从不”。

动态分配对于大型复杂数据结构很有用,这些数据结构的生命周期和/或大小在编译时是未知的,或者只是太大而无法放在堆栈上。