如何在C++中使用新运算符初始化内存?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (28)

我刚刚开始进入C ++,我想要选择一些良好的习惯。如果我刚刚intnew运算符分配了一个类型的数组,我怎么能将它们全部初始化为0,而无需自己循环遍历它们?我应该用memset吗?有没有“C ++”的方式来做到这一点?

提问于
用户回答回答于

这是C ++的一个令人惊讶的鲜为人知的特性(就像没有人给出这个答案一样),但它实际上有特殊的语法来默认初始化一个数组(在技术上,它被称为“value-初始化“):

new int[10]();

请注意,你必须使用空括号 - 例如,你不能使用(0)或使用任何其他表达式(这就是为什么这仅用于默认初始化)。

这是ISO C ++ 03 5.3.4 [expr.new] / 15明确允许的,它表示:

创建类型为T的对象的新表达式按如下方式初始化该对象: ...

  • 如果new-initializer是form(),则该项目被初始化(8.5);

并且不限制允许的类型,而(expression-list)表单由同一节中的其他规则显式限制,因此它不允许使用数组类型。

用户回答回答于

假设你真的想要一个数组而不是一个std :: vector,那么“C ++方式”就是这样

#include <algorithm> 

int* array = new int[n]; // Assuming "n" is a pre-existing variable

std::fill_n(array, n, 0); 

但请注意,在实际情况下,这实际上仍然是一个循环,它将每个元素赋值为0(除非具有硬件级支持的特殊体系结构,否则实际上没有其他方法来执行此操作)。

扫码关注云+社区