初始化的新对象分配

一个选项 初始值设定项 字段。 运算符的语法由。 这将使新的对象初始化具有用户定义的构造函数。 有关如何初始化的更多信息完成,请参见 初始值设定项。 下面的示例演示如何使用 运算符的初始化表达式:

// expre_Initializing_Objects_Allocated_with_new.cpp
class Acct
{
public:
    // Define default constructor and a constructor that accepts
    //  an initial balance.
    Acct() { balance = 0.0; }
    Acct( double init_balance ) { balance = init_balance; }
private:
    double balance;
};

int main()
{
    Acct *CheckingAcct = new Acct;
    Acct *SavingsAcct = new Acct ( 34.98 );
    double *HowMuch = new double ( 43.0 );
    // ...
}

使用 运算符,在此示例中,对象 CheckingAcct 分配,但是,默认初始化未指定。 因此,类的, Acct()默认构造函数,调用。 然后将对象 SavingsAcct 相同的方式,除此之外,显式初始化为 34.98。 由于 34.98 是类型 二进制文件,将该类型的参数的构造函数调用处理初始化。 最后, nonclass 类型 HowMuch 初始化为 43.0。

如果对象是类类型,并且该类具有构造函数 (在前面的示例中),对象可以由 运算符初始化,仅当上述任一条件匹配:

  • 在初始值设定项提供的参数与构造函数一致。

  • 类具有一个默认构造函数 (可调用没有参数的构造函数)。

访问控制和多义性控件在 operator new 执行,并在基于规则的构造函数指出在 多义性使用特殊成员函数的初始化

,在将数组使用 运算符时,显式每个元素初始化不能完成;只有默认构造函数,如果有,则调用。 请参见 默认参数 有关更多信息。

如果内存分配失败 (operator new 返回值为 0),初始化不执行。 这防止尝试初始化不存在的数据。

使用函数调用,的顺序初始化表达式计算未定义。 此外,在中,在内存分配继续之前,您不应依赖于完全计算的这些表达式。 如果内存分配失败,并 运算符返回零,在初始值设定项的某些表达式不能完全计算。

请参见

参考

新运算符(C++)