c++在建立物件的時候可以採用兩種方式:(例如類名為test) test test 或者 test* ptest = new test()。
這兩種方法都可以例項化乙個物件,但是這兩種方法有很大的區別,區別在於物件內容所在的記憶體空間不同,眾所周知,記憶體的分配方式有三種
(1)從靜態儲存區域分配。內存在程式編譯的時候就已經分配好,這塊內存在程式的整個執行期間都存在。例如全域性變數,static 變數。
(2) 在棧上建立。在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束後在將這些區域性變數的記憶體空間**。在棧上分配記憶體空間效率很高,但是分配的記憶體容量有限。
(3) 從堆上分配的。程式在執行的時候用 malloc 或 new 申請任意多少的記憶體,程式設計師自己負責在何時用 free 或 delete 釋放記憶體。
不使用new建立的物件在棧中分配記憶體空間,自動呼叫析構函式刪除該物件;
使用new建立的物件在堆中分配記憶體空間,必須手動釋放該物件的記憶體空間。
[cpp]view plain
copy
ctest* ptest =
newctest();
delete
ptest;
new之前不為該類物件分配任何記憶體空間,new申請的物件,則只有呼叫到delete時再會執行析構函式,如果程式退出而沒有執行delete則會造成記憶體洩漏。
[cpp]view plain
copy
ctest mtest;
在建立之初就已經分配了記憶體空間,此種建立方式,使用完後不需要手動釋放,該類析構函式會自動執行
下面是自己總結的一些關於new建立類物件特點:
C 物件建立方式
c 在建立物件的時候可以採用兩種方式 例如類名為test test test 或者 test ptest new test 這兩種方法都可以例項化乙個物件,但是這兩種方法有很大的區別,區別在於物件內容所在的記憶體空間不同,眾所周知,記憶體的分配方式有三種 1 從靜態儲存區域分配。內存在程式編譯的時候...
C 物件建立方式
原址 c 在建立物件的時候可以採用兩種方式 例如類名為test test test 或者 test ptest new test 這兩種方法都可以例項化乙個物件,但是這兩種方法有很大的區別,區別在於物件內容所在的記憶體空間不同,眾所周知,記憶體的分配方式有三種 1 從靜態儲存區域分配。內存在程式編譯...
javascript物件建立方式
在ecmascript中無法建立類,所以開發人員就發明了一種函式,用函式來封裝,以特定介面建立物件的細節,如下面的例子所示 function createperson name,age,job return temp var person1 createperson nick 20,student ...