string實質是字元陣列,兩個特點:1、該類不可被繼承;2、不可變性(immutable)
例如 string s1 = new string(「mystring」);
和 string s1 = 「mystring」;
第一種方式通過關鍵字new定義過程:
1.在程式編譯期,編譯程式先去字串常量池檢查,是否存在「mystring」,如果不存在,則在常量池中開闢乙個記憶體空間存放「mystring」;如果存在的話,則不用重新開闢空間,保證常量池中只有乙個「mystring」常量,節省記憶體空間。
2.然後在記憶體堆中開闢一塊空間存放new出來的string例項,在棧中開闢一塊空間,命名為「s1」,存放的值為堆中string例項的記憶體位址,這個過程就是將引用s1指向new出來的string例項。
3.你會發現string s1 = new string(「mystring」); 這一句**實際上可能建立了2個物件, 乙個是string物件,存放在堆中, 乙個是字串常量物件,存放在串池中
第二種方式直接定義過程:在程式編譯期,編譯程式先去字串常量池檢查,是否存在「mystring」,如果不存在,則在常量池中開闢乙個記憶體空間存放「mystring」;如果存在的話,則不用重新開闢空間。然後在棧中開闢一塊空間,命名為「s1」,存放的值為常量池中「mystring」的記憶體位址(相當於指向常量池中的「mystring」)。
C 建立物件new與不new區別
記憶體的分配方式有三種 1.從靜態儲存區域分配。內存在程式編譯的時候就已經分配好,這塊內存在程式的整個執行期間都存在。例如全域性變數,static 變數。2.在棧上建立。在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束後在將這些區域性變數的記憶體空間 在棧上分配記憶體空間效率很...
C 之建立物件時的new與不new
c 在建立物件的時候可以採用兩種方式 例如類名為test test test 或者 test ptest new test 這兩種方法都可以例項化乙個物件,但是這兩種方法有很大的區別,區別在於物件內容所在的記憶體空間不同,眾所周知,記憶體的分配方式有三種 1 從靜態儲存區域分配。內存在程式編譯的時候...
常規new和布局new
通常,new負責在堆 heap 中找到乙個能夠滿足要求的記憶體塊,new操作符還有另外一種變體,稱為布局 placement new操作符,它能夠讓你指定要使用的位置。要使用布局new,首先要包含標頭檔案new,它後面需要乙個提供位址的引數。話不多說看 newplace.cpp using plac...