首页 > 解决方案 > 如果我想使用“new”来分配它的数组,我是否必须为我的类定义一个默认构造函数?

问题描述

假设我有一个 A 类:

class A{
public:
 A(int const& someValue, std::string const& anotherOne);

private:
 std::string m_string_member;
 int m_int_member;
};

我想使用 new 分配这个类的数组:

A* myClassArray = new A[69];

我得到错误:No default constructor available。我是否必须通过调用为要使用的每个类编写一个默认构造函数new

标签: c++constructornew-operatordynamic-memory-allocation

解决方案


简短的回答:是的。

长答案:让我们从这里的矩阵开始https://foonathan.net/images/special-member-functions.png。您提供了一个不是默认构造函数的构造函数(您的构造函数带有参数)。因此编译器不会自动为您生成默认构造函数。但是,在您的分配中,您要求编译器默认构造 69 个元素。编译器应该如何做到这一点?但是,解决这个问题相当容易。只需提供默认构造函数,或者更简单,使用= default. 后者仅适用,因为您的所有成员都是默认可构造的。


推荐阅读