有如下c++**:
int* buffer = new
int[512];
在預設情況下,new
是不會對分配的int
進行初始化的。要想使分配的int
初始化為0,需要顯式地呼叫其初始化函式:
int* buffer = new
int(); // 分配的乙個int初始化為0
int* buffer = new
int(0); // 分配的乙個int初始化為0
int* buffer = new
int[512](); // 分配的512個int都初始化為0
對於單個int
,也可以初始化為非0值:
int* buffer = new
int(5); // 分配的乙個int初始化為5
但是無法將分配的所有元素同時初始化為非0值,以下**是不合法的:
int* buffer = new
int[512](0); // 語法錯誤!!!
int* buffer = new
int[512](5); // 語法錯誤!!!
c++11中增加了初始化列表功能,所以也可以使用以下的方式進行初始化:
int* buffer = new
int{}; // 初始化為0
int* buffer = new
int; // 初始化為0
int* buffer = new
int[512]{}; // 512個int都初始化為0
int* buffer = new
int; // 初始化為5
與上面不同的是,如下寫法是合法的:
int* buffer = new
int[512]; // 第乙個int初始化為5,其餘初始化為0
但是其結果與我們設想的不一樣,它並不是將分配的512個int
都初始化為5,而僅僅是將第乙個int
初始化為5,其餘的511個仍然初始化為0!
而且正如初始化列表中「列表」兩字所指出的,我們實際上可以用乙個列表來初始化分配的記憶體:
int* buffer = new
int[512]; // 前4個int分別初始化為1、2、3、4,其餘int初始化為0
注:以上**均在visual studio 2015 community updata3 下測試通過。
值初始化 new
程式如下 include using namespace std int main int a new int 1 int b new int 2 int c new int 3 cout int p new int 5 這句是從堆上分配乙個int型變數所佔的位元組記憶體,這個記憶體單元存放的整數值...
使用new時的初始化問題
在使用new分配記憶體單元時,一般希望新分配的單元能被初始化為全0。注意以下兩條語句 c code 1 2 int ptrint1 newint 新分配的記憶體單元裡的值是未知 int ptrint2 newint 加上括號。新分配的記憶體單元裡的值是全0 例1 在區域性區域內 c code 1 2...
例項的初始化過程 new 物件
類的載入過程 1.jvm會先去方法區中找有沒有相對應類的.class存在。如果有就直接使用,如果沒有,則把相關類的.class 載入到方法區 2.在.class載入到方法區時,會分為兩部分載入 先載入非靜態內容,再載入靜態內容 3.載入非靜態內容 把.class中的所有非靜態內容載入到方法區下的非靜...