Я долго боролся с такого рода проблемами, поэтому решил спросить здесь.
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
с или dynamic_cast
с в ряде операторов if для проверки каждого возможного производного типа и последующего использования оператора new
.
Есть ли другой, лучший подход?
П.С .: Я знаю, что этой проблемы можно избежать, используя умные указатели, но мне интересен минималистичный подход без набора библиотек.