2012-02-03 57 views
1

最近这一直在困扰着我。假设我有一个基类Base。如果我在Base之上有多个派生类,比如DerivedA和DerivedB,则深层副本会变得很痛苦。在派生类上执行深层复制

OtherClass(const OtherClass & _rhs) 
{ 
    //I have a list of Base *, now I must assign a class id to each derived class to properly create a new one. 
    //... 
} 

有什么办法来解决这个问题?

+1

设计得更好。最小的耦合,最大的内聚力。 – 2012-02-03 22:36:18

+0

我不觉得有什么办法来重组它。我有一个充满了瓷砖的地形类。不同的瓷砖行为会有所不同。我还要如何复制地形类? – lowq 2012-02-03 22:41:56

+0

取决于你的瓷砖做什么。例如,如果它们主要由行为构成,而不是状态,那么您可能无需在该图块每次存在于世界中时实例化一个Tile子类的一个实例:您可以简单地引用单个共享实例。如果你的Tiles需要状态,但是它对每个tile都是一样的状态,那么你可以将这个状态从Tile类中取出。 – 2012-02-03 22:57:58

回答

9

你应该在你的基类定义了一个克隆方法:

virtual Base * clone() const = 0; 

每一个派生类中实现该克隆方法:

virtual DerivedA * clone() const { 
    return new DerivedA(*this); 
} 

那么你OtherClass只是要迭代,并调用clone方法在每个实例Base*在您的列表中。

+0

这是一个好主意。 – lowq 2012-02-03 22:49:25