Я долго боролся с этой проблемой, поэтому решил спросить здесь.
class Base {
virtual ~Base();
};
class Derived1 : public Base { ... };
class Derived2 : public Base { ... };
...
// Copies the instance of derived class pointed by the *base pointer
Base* CreateCopy(Base* base);
Метод должен возвращать динамически созданную копию или по адресу как минимум сохранить объект в стеке в некоторой структуре данных, чтобы избежать проблемы «возврата адреса временной».
Наивный подход к реализации вышеупомянутого метода будет использовать несколько typeid
s или dynamic_cast
в серии операторов if, чтобы проверить каждый возможный производный тип, а затем использовать оператор новый
.
Есть ли какой-нибудь другой, лучший подход?
PS: Я знаю, что этой проблемы можно избежать с помощью умных указателей, но меня интересует минималистичный подход без кучи библиотек.