繁体   English   中英

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

[英]Are dynamically allocated objects default initialized?

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

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

int *pi = new int; // unitialized int

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

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

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

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

我理解这个吗?

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM