Почему бы не создать pv класс Clonable
:
template <typename T>
struct Clonable {
virtual smart_ptr<T> clone() const = 0;
}
для smart_ptr
, являющегося std::shared_ptr
, std::unique_ptr
, boost::shared_ptr
и т. Д. Смысл в том, чтобы пересчитать указатель, чтобы избежатьиспользование руководства delete
с, за исключением случаев написания пользовательского Deleter
.
Затем определите Actor
как:
class Actor : ..., public Clonable<Actor> {
...
public:
...
virtual smart_ptr<T> clone() const { return 0; }
...
...
}
Затем для T : public Actor
,
scene.addActor((T()).clone());