我们有一个Base
类和一个Derived
派生自Base
.
在其他一些类中,我们希望有一个 type 的成员shared_ptr<Base>
。
我们不能Base
直接使用该类型,因为这样的直接复制会排除子类。
但是,我们仍然想Base
在构造时“复制”(或子类)对象,因为我们想排除它被修改的可能性。
处理这个问题的经典方法是将一个虚拟成员函数clone()
放入Base
类中,Base
然后每个子类都可以实现。然后Everyclone()
将返回其自身的“副本” - 例如,Derived
将 return make_shared<Derived>(*this)
。
这种方法的问题在于,这需要每个新的子类Base
来实现这个clone()
功能。每个中的代码都clone()
相当样板,一直重复它似乎有点不自然。
自 C++11 以来有更好的方法来做到这一点吗?