我想了一个,这么解释你能明白吗:
Base base;
Derived derived;
Base* p = &derived;
unique_ptr<Base> a = base.clone();
unique_ptr<Base> b = p->clone(); // 这个Base其实是一个Derived对象
unique_ptr<Derived> c = derived.clone(); // 不需要强制转换了。
这三种情况都完美的解决了啊。
【 在 hongdiao 的大作中提到: 】
:
: 也许我误解了LZ的本意。 但是这个问题的引入不只是需要一个虚函数, 而是需要一个能够在外面使用基类指针或者引用调用的虚函数吧? 这也是虚函数的最常见的用法: 代码拿到一个指向基类的指针或者引用,不管其具体类型,通过调用虚函数得到合适的行为。
: 你的方案里面,虚函数是是pretected,外界无法调用。 clone又不是虚的,外面调用还需要特定子类型。
--
FROM 76.126.252.*