C++ 未初始化的类数组

标签 c++ class constructor

在我的研究中,我了解到如果你想阻止用户调用类的默认构造函数,你可以将其设为私有(private):

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

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

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

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

最佳答案

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

C++ 中没有“未初始化”对象这样的东西。一个对象在构造时就存在,并且在构造期间,它会以某种方式初始化,具体取决于对象的外观。

关于C++ 未初始化的类数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11048259/

相关文章:

C++:如何通过 curl 调用使用 HTTP post 请求发送二进制数据(protobuf 数据)

python - 如何在新类中实例化对象?

java - getConstructor() 返回一个未实现的构造函数

java - 如何处理2个几乎相同的构造函数

c# - 谁能在没有代码主体的情况下解释这个类构造函数?

c++ - Boost类序列化,成员类型的改变

c++ - 如何控制链式方法调用的 clang 格式缩进?

c++ - 为什么在使用 typeid 运算符时需要#include <typeinfo>?

python - 当函数需要成为一个类时

python - Python 中嵌套类的正确语法?