对象数组 - 初始化

Naf*_*aly 1 c++

假设我有一个C++类,我没有写任何构造函数.这两行之间有什么区别:

1. Complex* parray = new Complex[10]; 
2. Complex* parray2 = new Complex[10]();
Run Code Online (Sandbox Code Playgroud)

如果将提供构造函数,行为是否会改变.

jua*_*nza 7

这取决于的类型Complex.如果它是POD,例如,

struct Complex
{
  double re, im;
};
Run Code Online (Sandbox Code Playgroud)

然后1.将导致数据成员没有初始化,并且2.将导致这些值被初始化,这意味着零初始化.如果数据成员是用户定义的类型,那么在两种情况下都将调用它们的默认构造函数:

struct Complex
{
  std::string re, im;
};
Run Code Online (Sandbox Code Playgroud)