【发布时间】:2011-08-09 12:40:15
【问题描述】:
我为这种问题苦苦挣扎了很久,所以决定在这里问一下。
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);
该方法应该返回一个动态创建的副本,或者至少将对象存储在某个数据结构的堆栈中以避免“临时返回地址”问题。
实现上述方法的简单方法是在一系列 if 语句中使用多个 typeids 或 dynamic_casts 来检查每个可能的派生类型,然后使用 new 运算符。
还有其他更好的方法吗?
P.S.:我知道,使用智能指针可以避免这个问题,但我对简约的方法很感兴趣,没有一堆库。
【问题讨论】:
-
这似乎与此问题完全相同:stackoverflow.com/questions/5148706/…。请参阅 Michael Anderson 那里接受的答案。
-
@Darhuuk:我不太确定关于重复的 SO 政策是什么,但这个问题有点不同。此处的 OP 询问了解决此问题的方法,而该问题的 OP 询问了克隆是否是一种好的 C++ 方法。这显然是相关的,只是不确定它是否“完全重复”。
-
@Itjax 很公平,只是给出的答案或多或少正是 OP 正在寻找的。虽然我猜你下面的答案更方便:)。
标签: c++ class copy instance polymorphism