為什麼要有new?為什麼要動態建立物件?為什麼有時候不用new,有時候又用new,比如:
// cocos2d-x3.x的value類,大家都很熟悉了
value v = value(100);
// cocos2d-x的sprite類,也很屬性了
sprite* sp = new sprite();
為什麼有些地方不用new,有些地方又要new呢?
這就涉及到自動儲存和動態儲存了。
自動儲存,也叫做自動變數,比如int num = 10; 這個num就屬於自動變數。
所謂自動,代表它會自動申請記憶體,也會自動釋放記憶體,自動變數是儲存在棧裡的(後進先出)。
如果大家覺得很難理解,那麼,換乙個名稱——區域性變數。
這個好理解了吧?區域性變數在離開函式,或者離開它所屬的**塊之後,就會被釋放。
而value v = value(100); 、int num = 10; 這些都是區域性變數,一旦離開函式或者離開它的作用域,就會被釋放。
比如把int num; 作為成員變數,那麼,在這個類被釋放的時候,num變數也會被釋放。
這就是為什麼我們在建立了這麼多int、float等基本型別的變數之後,不需要去釋放它們。
因為它們是自動被釋放的。
自動變數有很大的好處,那就是不需要我們去管記憶體方面的事情,但是,有時候我們不希望有這樣的自動釋放記憶體。
我們希望自己去控制什麼時候釋放物件,這時候就要用到new了。
我們都知道,new了之後,如果不呼叫相應delete的話,申請到的記憶體空間是永遠都不會被釋放的。
這就是動態儲存了,我們自己來申請記憶體,自己來釋放記憶體。
當然,記憶體洩露的罪魁禍首之一也正是new~!
因為正常人都會有疏忽的時候,並且當程式足夠龐大、邏輯足夠複雜的時候,有些地方呼叫了new,卻疏忽了delete是再正常不過了。
當然,new的作用也許不僅於此,書上目前還沒深入介紹,我也不多說,免得說錯,畢竟c++還是需要嚴謹一些的~
我不敢亂吹水~
C 為啥要使用new
為什麼要有new?為什麼要動態建立物件?為什麼有時候不用new,有時候又用new,比如 cocos2d x3.x的value類,大家都很熟悉了 value v value 100 cocos2d x的sprite類,也很屬性了 sprite sp new sprite 為什麼有些地方不用new,有些...
談談咱們為啥要使用npm?
在學習npm之前,我們首先靜下心來問問自己為什麼要學習它,學習它之後有什麼好處呢 程式設計師似乎自產生就骨子裡有著樂於分享資訊和資源的優秀品質,在很早之前,大家都是通過分享自己的網 的,因此這時乙個擁有三大美德的程式設計師 isaac z.schlueter 以下簡稱 isaaz 給出了乙個解決方案...
資料庫為啥要使用引數繫結?
儲存過程 stored procedure 是在大型資料庫系統中,一組為了完成特定功能的sql 語句集,經編譯後儲存在資料庫中,使用者通過指定儲存過程的名字並給出引數 如果該儲存過程帶有引數 來執行它。1.為什麼使用繫結變數?這是解決oracle應用程式可伸縮性的乙個關鍵環節 而oracle的共享池...