我有这段代码,我试图从多个继承的类对象分配基类的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>();
}
答案 0 :(得分:3)
这里的问题是继承树被弄乱了。如果您打算使用I
中C
的多个虚拟继承,那么A
和B
都必须虚拟继承它,否则C
将以两个{ {1}}个子对象导致转换问题:
I