1. 程式人生 > >c++:為什麼要使用動態記憶體分配

c++:為什麼要使用動態記憶體分配

例項化一個類有兩種方式:

// 假設有一個類A

// 方式一:直接定義法
A a;
// 方式二:動態記憶體分配法
A * a = new A();

兩者有什麼差別呢?
實際上,方式二即等價於如下程式碼:

A * a = new A();

等價於

A * a;
a = new A();

方式一就是直接將a放入棧區(區域性變數,大小受限,自動釋放);

方式二則是在堆區(動態記憶體,大小任意,手動釋放)分配一塊記憶體,然後用指標a去指向這塊記憶體;

那麼我們很容易就知道為什麼要使用動態記憶體分配來例項化一個類。

原因:

1.可以動態的申請空間,以便動態確定物件所需要的記憶體;
2.便於儲存大型物件,通常情況下棧區的大小容不下過於龐大的物件;
3.傳遞指標比傳遞整個物件更方便高效;

舉幾個生動形象的例子解釋以上三條原因:
1. 每個人都要吃鹽,鹽不夠了再去買顯然比把這輩子要吃的鹽一次性買下來要明智;
2. 如果你是賣鹽的,儲存了很多鹽,你只需要建一個倉庫把鹽放進去,然後自己記住倉庫地址即可,而不需要把鹽全部放在自己的家中;
3. 如果要去很遠的地方談賣鹽的生意,只需要選一些有代表性的資訊(地址)給對方就可以了,不需要把整個倉庫搬過去給對方看。