C++未初始化的类数组

Das*_*aru 0 c++ constructor class

在我的学习中,我了解到如果你想阻止用户调用类的默认构造函数,你可以将它设为私有:

class Person
{
public:
  Person(const Person&);
  ~Person();
private:
  Person();  //Any call to this will cause a compiler error.
};
Run Code Online (Sandbox Code Playgroud)

我不明白的是当我创建一个未初始化的类数组时,它给我一个语法错误,说它是私有的:

Person * ptr;   //Works just fine.
Person arr[1];  //Syntax error: 'Person::Person()' is private
Run Code Online (Sandbox Code Playgroud)

这会让我相信它会在创建数组时尝试调用默认构造函数.但这对我没有任何意义,因为我实际上并没有创建任何真实的对象.

jal*_*alf 7

你没有创建一个未初始化的数组.您正在创建一个Person对象数组.他们必须以某种方式进行初始化.如果不存在构造函数,那么它将回退到默认初始化规则(这可能会使某些成员具有未指定的值).但是当声明构造函数时,必须使用它.

在C++中没有"未初始化"的对象.一个对象在构造时就存在,并且在构造期间,它以某种方式初始化,这取决于对象的外观.