我有这个代码我试图从多个继承的类对象中分配基类的unique_ptr。我在下面编译错误:
‘std::unique_ptr<I>’ and ‘std::_MakeUniq<C>::__single_object {aka std::unique_ptr<C, std::default_delete<C> >}’) a = make_unique<C>(); ^ ```
有可能这样做吗?
#include <memory>
class I {
};
class A : public I {
};
class B : public I {
};
class C : virtual public A, virtual public B {
};
using namespace std;
int main() {
unique_ptr<I> a;
a = make_unique<C>();
}
这里的问题是继承树搞砸了。如果你要在I
中使用来自C
的多个虚拟继承,那么A
和B
必须虚拟地继承它,否则C
将最终导致两个I
子对象导致转换问题:
class A : public virtual I {
};
class B : public virtual I {
};