Нужно ли мне определять конструктор по умолчанию для моего класса, если я хочу использовать «new» для выделения его массива?

Допустим, у меня есть класс A:

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

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

И я хочу выделить массив этого класса, используя новый:

A* myClassArray = new A[69];

Я получаю сообщение об ошибке: No default constructor available . Нужно ли писать конструктор по умолчанию для каждого класса, который я хочу использовать, вызывая new ?

Всего 2 ответа


Краткий ответ: да.

Длинный ответ: давайте начнем с этой матрицы здесь https://foonathan.net/images/special-member-functions.png . Вы предоставляете конструктор, который не является конструктором по умолчанию (ваш принимает аргументы). Таким образом, компилятор не будет автоматически генерировать конструктор по умолчанию для вас. Однако в вашем распределении вы просите компилятор построить по умолчанию 69 элементов. Как компилятор должен это сделать? Но решить эту проблему довольно легко. Просто предоставьте конструктор по умолчанию или, что еще проще, используйте = default . Последний работает только потому, что все ваши члены конструируются по умолчанию.


В C ++, если для типа класса не предусмотрено никаких объявленных пользователем конструкторов любого типа, компилятор всегда объявляет конструктор по умолчанию. Если вы предоставляете какой-либо конструктор и хотите использовать конструктор по умолчанию, вам следует явно определить конструктор по умолчанию.