我有一个典型的clone()
模式,如:
class Base {
virtual Base *clone() const;
};
class Derived : public Base {
Derived *clone() override;
// ^-- note the contravariant type!
};
现在我想取消愚蠢的指针,所以我想用[{1}}替换返回类型:
std::unique_ptr
但class Base {
virtual std::unique_ptr<Base> clone() const;
};
class Derived {
virtual std::unique_ptr</* Can't be Derived here */> clone() const;
};
不是std::unique_ptr<Base>
的基础,因此该方法无法返回它。但std::unique_ptr<Derived>
中有其他方法需要调用Derived
,并且需要将结果视为clone()
(他们可以确定存在)。
现在Derived
至少有std::shared_ptr
。但这不适用于unique_ptr。最干净的方法是什么?