new的初始化

有如下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

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

int* buffer = new int{}; // 初始化为0
int* buffer = new int{0}; // 初始化为0
int* buffer = new int[512]{}; // 512个int都初始化为0
int* 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 下测试通过。

  • 17
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值