可能重複:
What is difference between instantiating an object using new vs. without
Creating an object: with or without `new`對象的構造語法
是什麼這兩個語句
HttpUtil httpUtil;
和
之間的區別HttpUtil *net = new HttpUtil();
哪一個更好用?
可能重複:
What is difference between instantiating an object using new vs. without
Creating an object: with or without `new`對象的構造語法
是什麼這兩個語句
HttpUtil httpUtil;
和
之間的區別HttpUtil *net = new HttpUtil();
哪一個更好用?
第一條語句在'堆棧'上創建一個名爲httpUtil
的變量 - 這意味着只要包含該行的函數結束,變量就會'超出範圍'並被釋放(它使用的內存將變爲空閒用於其他的東西)。
第二條語句在'堆'上創建一個變量 - 這意味着變量將保留在內存中,直到您調用delete
爲止。在堆中分配變量時,需要確保始終使用delete
,否則會發生內存泄漏 - 這是您無法再看到變量*net
的地方,但內存仍在分配中。
第一個是靜態創建的對象,你不需要擔心它的破壞。 後來一個是動態創建的對象,您需要在應用程序終止之前處理它的銷燬。
第一個是你不需要擔心內存管理的首選。
第一個分配在堆棧上,另一個分配在堆上,程序員有責任在使用後釋放它(當它在堆上分配時)。當你可以沒有第二個,更喜歡第一個:) – Maroun
請從[這裏](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)得到一個初學者的書。 – pmr