使用新表达式

时间:2015-07-01 15:16:56

标签: c++ initialization

让我们考虑以下简单程序:

int main()
{
    int *a = new int;
}

*a的值0是否可靠?我确定,因为原语没有默认初始化:

  

默认初始化T类型的对象意味着:

     

(7.1) - 如果T是(可能是cv认证的)类类型(第9条),   构造函数被考虑。适用的构造函数是   枚举(13.3.1.3),初始化器()的最佳值是   通过重载决议(13.3)选择。因此构造函数   使用空参数列表调用selected来初始化   对象

     

(7.2) - 如果T是数组类型,则每个元素都是默认初始化的。

     

(7.3) - 否则,不执行初始化

我说*a没有初始化,因此访问它会导致UB。这是对的吗?

2 个答案:

答案 0 :(得分:7)

要绝对清楚,请考虑

int *a = new int;

int *b = new int();

*a 未初始化*b初始化为0.

在初始化之前使用*a是未定义的行为。

答案 1 :(得分:4)

您可以使用int对其进行值初始化(即将new int()设置为零)。