"int *a = new int" 和 "int *a = new int()" 有什么区别?

10

以下两行之间有什么区别?

int *a = new int;

int *a = new int();
2个回答

14
int *a = new int;

a指向默认初始化的对象(在这种情况下是未初始化的对象,即其值是不确定的,根据标准)。

int *a = new int();

a 指向一个值初始化的对象(在情况下是零初始化的对象,即根据标准,该值为)。


4
如果需要,以下是C++11标准中关于值初始化、零初始化和默认初始化的相关内容:第8.5节第7段、第8.5节第5段和第8.5节第6段。我怀疑这位提问者是否有兴趣了解这些内容。请注意,本回答仅为翻译,不包含任何额外解释或信息。 - WhozCraig
4
请注意,测试可能无法暴露这种差异:与自动存储不同,动态分配的内存在简单的测试程序中通常会变为零,并且仅在更大的程序中包含“垃圾”,当较早的内存被重复使用时才会出现。 - user743382

6
第一种变体默认初始化动态分配的int,对于内置类型(如int)不执行任何初始化。
第二种变体值初始化,对于int来说意味着零初始化,即赋值为0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接