Предположим, у меня нет конструкторов, каковы другие способы инициализации членов данных класса? _init () методы? учитывая, что мы должны выделить память для членов данных.
Если вы не знаете значение, которое нужно присвоить полю, это может означать две вещи:
std::optional<>
член, который может быть инициализирован в nullopt
, Вы также можете использовать std::optional<>
чтобы избежать загрязнения ваших в противном случае чистых классов ресурсов с недопустимым состоянием (то есть потенциально открытый ресурс std::optional<T>
и, безусловно, открыт T
)Не делайте поля инициализации по умолчанию, которые вы еще не знаете: вы тратите время и, возможно, пространство. Не делайте используйте указатели для отсрочки строительства: указатели предназначены для разделение среди классов — с этим, вы бы тратить много времени (из-за nullptr
проверьте всех членов) и принудительно динамическое распределение, где это необходимо. Просто используйте std::optional<>
когда вам не нужно делиться, но предпочитаете занятия с определенно известными участниками. Попробуйте упростить инвариант, который хранит класс, а не его конструкцию. Вы обнаружите, что это заставляет вас писать циклы и вызовы в оптимальном порядке для повторного использования данных в долгосрочной перспективе.
Если вы не создадите свой собственный конструктор, компилятор автоматически сгенерирует конструктор по умолчанию. Класс в C ++ должен иметь хотя бы один конструктор.
Если какой-либо из ваших элементов данных не может быть инициализирован конструктором по умолчанию, компилятор сообщает об ошибке компиляции.