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

新手上路,请多包涵

我刚开始接触 C++,我想养成一些好习惯。如果我刚刚使用 new 运算符分配了一个类型为 int 的数组,我怎样才能将它们全部初始化为 0 而无需自己循环遍历它们?我应该只使用 memset 吗?有没有“C++”的方式来做到这一点?

原文由 dreamlax 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 586
2 个回答

这是 C++ 一个令人惊讶的鲜为人知的特性(这一点可以从没有人给出这个答案的事实中得到证明),但它实际上具有用于对数组进行值初始化的特殊语法:

 new int[10]();

请注意,您 必须 使用空括号——例如,您不能使用 (0) 或其他任何东西(这就是为什么这只对值初始化有用)。

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

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

  • 如果 new-initializer 的形式为 () ,则该项为值初始化 (8.5);

并且不限制允许这样做的类型,而 (expression-list) 形式受到同一部分中的进一步规则的明确限制,因此它不允许数组类型。

原文由 Pavel Minaev 发布,翻译遵循 CC BY-SA 4.0 许可协议

初始化普通动态数组的可能方法。根据您的要求选择一个。

 int* x = new int[5];          // gv gv gv gv gv (gv - garbage value)
int* x = new int[5]();        // 0  0  0  0  0
int* x = new int[5]{};        // 0  0  0  0  0  (Modern C++)
int* x = new int[5]{1,2,3};   // 1  2  3  0  0  (Modern C++)

原文由 SridharKritha 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题