Cat.
В глобальном скопе где-то над main() определю без инициализации Animal current_animal;. Внутри мейна в цикле получаем данные из сторонних источников и в зависимости от этих данных меняем current_animal:
Animal current_animal;
int main(){
while(true){
x = get_data();
if (x == 1){
current_animal = Human(...);
} else if {
current_animal = Dog(...);
}
}
}
То будет ли такое работать? Как правильно чистить память (или она сама будет чистится)?
Ну, по порядку Во первых глоабльную память чистить не надо, она очистится при завершении программы Во вторых, при таком синтаксисе у тебя произойдёт срезка характеристик, относящихся к классам-наследникам и разницы между инициализациями не будет
1. Ну я про то, что во время цикла очень много раз может быть создан новый экземпляр одного из трёх классов, а каждую итерацию эту память бы чистить если был изменён экземпляр одного типа на другой. 2. Вот это засада конечно, я думал что сохранится(
1. Очень много - это 10 раз?
Это сто тысяч раз.
Если у тебя три класса то создай заранее эти три экземпляра и в ифах просто цепляйся указателем на них
Я так понимаю, что там аргументы к-торов разные
А как правильно указатель определить?
std::unique_ptr это он и есть
current_animal = Human(...); ... зависит от ввода?
От ввода, времени, того что в x пришло, от состояния программы вообще
Но вообще подход так себе ибо расширяемость плохая. Надо подумать как лучше
Обсуждают сегодня