Какие еще способы инициализации (выделения памяти) данных-членов класса в c ++ кроме конструкторов?

Предположим, у меня нет конструкторов, каковы другие способы инициализации членов данных класса? _init () методы? учитывая, что мы должны выделить память для членов данных.

-5

Решение

Если вы не знаете значение, которое нужно присвоить полю, это может означать две вещи:

  • В основном это означает, что у вас нет класса вообще. Обратите внимание, что в C ++ класс не является «хранилищем сбора» для некоторых данных, пока у вас их нет (для этого у нас есть отдельный шаблон / анти-шаблон, называемый Builder), и в этом случае вам не следует создавать класс. Вы можете рассмотреть возможность создания еще нескольких классов, которые будут смоделированы после данных, которые у вас есть на тот момент.
  • Иногда для класса допустимо иметь или не иметь данные; то есть данные необязательно являются частью класса согласно инварианту класса. В этом случае используйте std::optional<> член, который может быть инициализирован в nullopt, Вы также можете использовать std::optional<> чтобы избежать загрязнения ваших в противном случае чистых классов ресурсов с недопустимым состоянием (то есть потенциально открытый ресурс std::optional<T> и, безусловно, открыт T)

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

1

Другие решения

Если вы не создадите свой собственный конструктор, компилятор автоматически сгенерирует конструктор по умолчанию. Класс в C ++ должен иметь хотя бы один конструктор.
Если какой-либо из ваших элементов данных не может быть инициализирован конструктором по умолчанию, компилятор сообщает об ошибке компиляции.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector