动态分配的对象是否默认初始化?

che*_*gpu 3 c++ initialization language-lawyer

在C++ Primer 5th(第12章)中,

默认情况下,默认初始化动态分配的对象,这意味着内置或复合类型的对象具有未定义的值;

int *pi = new int; // unitialized int
Run Code Online (Sandbox Code Playgroud)

此语句指示内置类型对象在默认初始化时具有未定义的值.但是,默认初始化内置类型对象的行为取决于它的定义位置.

具体来说,任何函数外部的内置类型对象都应该是0,而某些块内的内置类型对象具有未定义的值.

因此,我认为上面的陈述不准确,因为对于内置类型:

默认初始化!=未定义的值

我理解这个吗?

Bri*_*ian 8

对于非类类型,默认初始化不执行初始化.

但是,在进行任何其他初始化之前,具有静态或线程存储持续时间的变量始终为零初始化.因此,如果您具有int x;全局范围,尽管默认初始化不执行任何操作,x但由于在默认初始化之前进行了零​​初始化,因此仍初始化为零.

对于具有动态存储持续时间的非类对象,如果未给出初始化程序,则该值是不确定的,因为零初始化不适用.