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)
这会让我相信它会在创建数组时尝试调用默认构造函数.但这对我没有任何意义,因为我实际上并没有创建任何真实的对象.
你没有创建一个未初始化的数组.您正在创建一个Person对象数组.他们必须以某种方式进行初始化.如果不存在构造函数,那么它将回退到默认初始化规则(这可能会使某些成员具有未指定的值).但是当声明构造函数时,必须使用它.
在C++中没有"未初始化"的对象.一个对象在构造时就存在,并且在构造期间,它以某种方式初始化,这取决于对象的外观.