У меня есть класс, как показано ниже:
#pragma once
#include <atomic>
class MyClassAnother {
public:
MyClassAnother(int val) : m_val(val) {
}
private:
int m_val;
};
Есть еще один класс, который содержит объект MyClassAnother
#pragma once
#include "MyClassAnother.hpp"
class MyClass {
public:
MyClass() {
}
void Func() {
anotherClassObject = MyClassAnother(2);
}
private:
MyClassAnother anotherClassObject;
};
А вот main.cpp
#include "MyClass.hpp"
#include <iostream>
int main() {
MyClass object;
}
Конечно, программа не компилируется. И это из-за следующей ошибки
error: конструктор для 'MyClass' должен явно инициализировать член 'anotherClassObject', у которого нет конструктора по умолчанию
Вопрос:
Но почему? Почему я не могу отложить инициализацию ученика? Обходной путь должен иметь конструктор по умолчанию и задержка инициализировать его реальным конструктором позже? Это анти-паттерн, чтобы делать это таким образом?
Я знаю, что это можно решить, сделав MyClassAnother anotherClassObject
указателем. Но я хочу иметь MyClassAnother anotherClassObject
в качестве объекта-члена или ссылочного члена в этом случае.