C ++如何在有构造函数时创建对象数组?

C++ how can I create an array of objects when there is a constructor?

如果 myClass 没有构造函数,则以下工作正常:

myClass x[5];

如果我在 myClass 中放置构造函数,此行会导致编译错误。

在定义构造函数时创建对象数组的标准做法是什么?

是否可以用一个构造函数填充整个对象数组?

If myClass does not have a constructor the following works fine:

如果您的 class 没有 用户声明的构造函数 。在这种情况下,它有一个 隐式声明的默认构造函数

将使用它
myClass x[5];

构建对象。

如果您自己声明构造函数,则不会声明隐式默认构造函数。相反,您可以声明自己的。默认构造函数只是一个可以不带参数调用的构造函数:

class myClass {
public:
    myClass() {
        // Default constructor
    }
};

或者,如果您只是希望默认构造函数的行为与隐式构造函数完全相同,您可以 default it:

class myClass {
public:
    myClass() = default;
};

如果您不想这样做并使用不同的构造函数,您仍然可以使用列表初始化:

myClass x[5] = {{/*constructor arguments for first object*/},
                {/*constructor arguments for second object*/},
                //...
               };

或者,更简单,只需使用 std::vector<myClass>push_backemplace_back 每个元素以及您需要的构造函数参数。

std::vector<myClass> x;
x.emplace_back(/*constructor arguments for first object*/);
x.emplace_back(/*constructor arguments for second object*/);
//...

这也可以在循环中完成,或者,如果所有对象都应该是彼此的副本:

std::vector<myClass> x(5, myClass(/*constructor arguments*/));