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

时间:2016-07-21 02:51:52

标签: c++ initialization language-lawyer

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

  

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

int *pi = new int; // unitialized int

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

具体而言,任何函数外部的内置类型对象都应为0,而某些块内的内置类型对象具有未定义的值。

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

默认初始化!=未定义值

我能理解这一点吗?

1 个答案:

答案 0 :(得分:8)

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

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

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