与unique_ptr的逆差异

时间:2017-10-12 14:19:17

标签: c++ c++11 virtual-method

我有一个典型的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。最干净的方法是什么?

0 个答案:

没有答案