2010-11-29 53 views
0

是什麼這之間的區別: -簡單的動態分配問題

width = new int; 

這: -

int width; 

即什麼用的是第一個代碼動態分配?

+2

您可能想要更改「width = new int;」到「int * width = new int;」 :) – Palmik 2010-11-29 21:02:53

+1

你應該坐下來用一本begginer C++書,因爲你明顯缺少指針的基礎知識 – Falmarri 2010-11-29 21:15:16

回答

3

前者分配動態的一個int並返回其在內存地址(寫入變量width,你有後來與delete釋放它,它的存在,直到然後。

後者聲明的局部變量鍵入int,當它離開當前作用域時將變爲無效

0

一個在堆上分配,另一個在堆棧上,一個必須管理,另一個是「自動」,一個是通過解除引用訪問的另一個你不...

編輯:關於你的第二個問題,沒有太多...有幾個例子,但你幾乎總是會使用一個智能指針,如果不是,你在玩火... :)

2

你的意思大概是:

int* w1 = new int; 
int w2; 

首先是在堆上分配的,你必須照顧thememory與運營商delete

第二個在堆棧上,並在超出範圍後不再存在(所以你不必自己照顧內存)。

0

第一個爲堆上的整數分配空間並分配空間來將指針保存在堆棧上。它還將寬度初始化爲0.分配給堆的空間必須由程序員重新分配(額外的負擔)。堆上的這個空間可以從任何地方訪問,只要指向它的指針可用並且內存不被釋放。

第二個聲明只是在堆棧上分配空間,並在變量超出範圍時自動釋放。寬度的值是垃圾。

0

動態分配一個int將是「有用的」,但我不會說「從不」,這是非常罕見的。

動態分配對於大小複雜的數據結構非常有用,這些數據結構的生命週期和/或大小在編譯時不爲人知,或者太大而無法放在堆棧上。