这有什么区别: -
width = new int;
这个: -
int width;
即。第一个代码中的动态分配有什么用?
答案 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
的动态分配很少“有用”,但我不会说“从不”。
动态分配对于大型复杂数据结构很有用,这些数据结构的生命周期和/或大小在编译时是未知的,或者只是太大而无法放在堆栈上。