C++ 動態分配內存的好處

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

// 假設有一個類A

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

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

A * a = new A();

等價於

A * a;
a = new A();

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

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

那麼我們很容易就知道爲什麼要使用動態內存分配來實例化一個類。

原因:

1.可以動態的申請空間,以便動態確定對象所需要的內存;
2.便於儲存大型對象,通常情況下棧區的大小容不下過於龐大的對象;
3.傳遞指針比傳遞整個對象更方便高效;(當然對於一個變量也可以取地址,但是臨時變量的地址是不能長久使用的,特別是返回臨時變量的地址是大忌)
4.同時傳遞指針可以便於大家共同維護一個空間,指針在傳遞的過程中,大家都可以修改指針指向的內容,當然要加鎖進行保護,這樣一處修改,處處修改,否則就要設置全局的變量,大家統一修改使用;

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

4.比如a,b,c三個人一起賣鹽,然後都知道倉庫的地址,然後A賣的時候,知道地址就可以把鹽取走,倉庫裏的鹽變少了,這樣b和c的倉庫都被修改了,這樣就達到了一個一處修改,處處修改,如果不是指針,而是給三個人都有一個全量的倉庫,那麼一個修改,另外兩個不會修改。想到達統一,就得一個人修改,後再通知另外兩個鹽變少了多少。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章