Как организовать владение одним экземпляром класса коллекции из объектов наследников абстрактного класса qt c++?
Имеется абстрактный класс IAction:
enum ActionResult_t
{
RESULT_UNKNOWN,
RESULT_IN_PROCESS,
RESULT_ERROR,
RESULT_FINISH
};
struct IAction
{
friend class ActionsEnivroment;
protected:
ActionsEnivroment& enivroment;
public:
QThreadStorage<QCache<char, double>> args;
explicit IAction(ActionsEnivroment& ae) : enivroment(ae)
{}
virtual bool isCorrected(QString&) = 0;
virtual void serializate(std::ostream&) = 0;
virtual void deserializate(std::istream&) = 0;
virtual void startExecution(){}
virtual ActionResult_t execute(ManipulatorController&, qint64) = 0;
virtual void endExecution(){}
virtual ~IAction(){}
};
Также имеется класс ActionsEnivroment
class ActionsEnivroment
{
public:
//Some variables and methods
ActionsEnivroment() = default;
template<typename T>
T* createAction()
{
T* act = new T(*this);
//???
return act;
}
bool deleteAction(IAction* a)
{
//???
return true;
}
};
Как реализовать механизм, в котором ActionsEnivroment является владельцем для всех наследников класса IIAction. При этом только он может создать и удалить их?
Я пытался реализовать std::list<std::shared_ptr<IAction>> внутри ActionsEnivroment, где хранились бы объекты всех созданных классов, но возникли ошибки.