В вашем коде вы изменяете тот же объект Dog
, вам нужно создать новый экземпляр, прежде чем вы установите описание для "Bad Dog", и у вас будет утечка памяти в вашей программе.
Так что вам лучше использовать Smartуказатели, либо std::unique_ptr
, либо std::shared_ptr
, в зависимости от того, какой тип владения вам нужен:
std::vector<std::unique_ptr<Animal>> animalVector;
animalVector.push_back( std::make_unique<Dog>());
animalVector.back()->setDescription("Good Dog");
animalVector.push_back( std::make_unique<Dog>());
animalVector.back()->setDescription("Bad Dog");
animalVector.push_back( std::make_unique<Cat>());
animalVector.back()->setDescription("Good Cat");
, и если вы зададите описание для каждого животного, вы должны передать его конструктору, тогда оно будет еще чище икороче:
animalVector.push_back( std::make_unique<Dog>("Good Dog"));
animalVector.push_back( std::make_unique<Dog>("Bad Dog"));
animalVector.push_back( std::make_unique<Cat>("Good Cat"));