Повторная инициализация всех переменных-членов только в производном классе

У меня есть два класса:

class NonCopyable {
private:
int key;
protected:
NonCopyable(const NonCopyable&) = delete;
NonCopyable& operator = (const NonCopyable &) = delete;
};

class Derived : public NonCopyable {
private:
std::vector<int> numbers;
float f;
int* ptr;
public:
Derived() : f(5.0f), ptr(nullptr) {}
~Derived();
};

Теперь я хотел бы повторно инициализировать все значения в Производный Класс и вызвать соответствующие деструкторы. Это NonCopyable класс не должен быть затронут, но Производный класс должен быть изменен, как если бы он был заново инициализирован.

Какой самый простой способ достижения этой цели? Я пытаюсь избежать создания функции-члена, которая вручную повторно инициализирует каждую переменную-член.


Понятно, что я не могу использовать следующий подход:

Derived d;
// [...] many changes to d
d = Derived();

потому что конструктор копирования удаляется из NonCopyable класс и тот факт, что это изменит переменные-члены NonCopyable если бы это было не так.

2

Решение

Это станет намного проще, если вы переместите ваши личные данные в отдельный агрегат:

struct DerivedData {
std::vector<int> numbers;
float f = 5.0;
int* ptr = nullptr;
};

class Derived : public NonCopyable {
DerivedData data;
public:
~Derived();
void reset() { data = DerivedData(); }
};
4

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

Других решений пока нет …

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