这是问题所在,我有一个指针的向量,以充满派生的对象,像这样一个抽象基类:如何在基类的向量中返回派生对象的副本?
class AbstractBase { /* ... */ };
clase Derived1 : public AbstractBase {
Derived1() { }
Derived1(const AbstractBase& abc) { /* ... */ }
};
/* ... */
vector< AbstratcBase* > lThingies;
const AbstractBase& getThingie(int pos) {
return *lThingies[pos];
}
而且得到我使用派生类“的拷贝构造函数”像这样的元素的副本:
Derived1 d1 = getThingie(2);
但问题是,我不喜欢这样的:有没有办法迫使这个“拷贝构造函数”建设一流“derived42”时的执行情况,即使你还记得它很容易让它出错(比如使它成为递归调用,发生在我身上)。
我的问题是:有没有更好的方法来做到这一点?怎么样?
更新:
其中之一,我正在寻找解决方案的“不成文”的要求是让副本衍生对象作为一个局部变量,所以我不要忘了删除它。
更多信息:
有许多的lThingies和在运行时,我可以告诉大家什么都包含在(derived1,Derived2的,等等)派生的对象,而不是在编译时。
多态性和复制语义不能很好地结合在一起。不要制作显式派生类型的副本。 –
你有没有听说过[virtual constructor idiom](http://www.parashift.com/c++-faq/virtual-ctors.html)? – Fiktik
我听说过虚拟构造函数的习惯用法,但我不想在完成它时删除对象。 – Fabi1816