new的初始化

2021-08-04 11:27:03 字數 1406 閱讀 8663

有如下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中的所有非靜態內容載入到方法區下的非靜...