這是問題所在,我有一個指針的向量,以充滿派生的對象,像這樣一個抽象基類:如何在基類的向量中返回派生對象的副本?
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