new的初始化

来源:互联网 发布:女性就业歧视数据 编辑:程序博客网 时间:2024/06/05 21:04

有如下C++代码:

int* buffer = new int[512];

在默认情况下,new是不会对分配的int进行初始化的。要想使分配的int初始化为0,需要显式地调用其初始化函数

int* buffer = new int(); // 分配的一个int初始化为0int* buffer = new int(0); // 分配的一个int初始化为0int* 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

C++11中增加了初始化列表功能,所以也可以使用以下的方式进行初始化:

int* buffer = new int{}; // 初始化为0int* buffer = new int{0}; // 初始化为0int* buffer = new int[512]{}; // 512个int都初始化为0int* buffer = new int{5}; // 初始化为5

与上面不同的是,如下写法是合法的:

int* buffer = new int[512]{5}; // 第一个int初始化为5,其余初始化为0

但是其结果与我们设想的不一样,它并不是将分配的512个int都初始化为5,而仅仅是将第一个int初始化为5,其余的511个仍然初始化为0!

而且正如初始化列表中“列表”两字所指出的,我们实际上可以用一个列表来初始化分配的内存:

int* buffer = new int[512]{1, 2, 3, 4}; // 前4个int分别初始化为1、2、3、4,其余int初始化为0

注:以上代码均在Visual Studio 2015 Community Updata3 下测试通过。

原创粉丝点击