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

标签 c++ initialization memory-management new-operator

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

最佳答案

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

new int[10]();

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

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

A new-expression that creates an object of type T initializes that object as follows:

...

  • If the new-initializer is of the form (), the item is value-initialized (8.5);

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

关于c++ - 如何在 C++ 中使用 new 运算符初始化内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2204176/

相关文章:

C++ 初始化列表与赋值

c++ - 在调用 main() 之前处理需要互斥锁的 C++ 初始化和多线程感知函数?

c++ - 如何在 C++ 中初始化列表 vector ?

c++ - 新运营商崩溃

c++ - Concurrency::parallel_for (PPL) 创建了太多线程

c++ - 在 C++ 中使用链表处理文件

java - 再次出现空指针异常

c - 检测到glibc-我的C程序中出现双重释放或损坏

java - 试图弄清楚弱引用何时开始被删除

c++ - 有没有办法知道在 C++ 中调用对象方法的类的名称?