Во-первых, список (list) из Python — это не
std::list
, а
std::vector
в C++.
Во-вторых, чтобы избавиться от проблем с удалением объектов, вместо обычных указателей используй
std::unique_ptr
из
#include <memory>
.
Выглядеть управление объектами будет как-то так:
std::vector<std::unique_ptr<Figure>> figures;
std::vector<std::unique_ptr<Decoration>> decorations;
figures.push_back(std::make_unique<Ball>(аргументы для конструктора Ball));
figures[0]->какой-нибудь метод Figure
В-третьих, чтобы наследование не вызывало неопределённого поведения, тебе (в обычной жизни, если ты не гуру разработчик компилятора) обязательно нужно объявить виртуальный деструктор в базовом классе:
virtual ~Figure() = default;
+ для Decoration.
В-четвёртых, по сути вопроса, чтобы иметь возможность сделать что-то полезное с Figure/Decoration, нужно добавить в них виртуальные функции (методы) C++ и вызывать примерно так, как я написал выше. Эту тему предлагаю освоить самому.