c++ - 如何从多个继承的类对象中分配 unique_ptr<base>?

标签 c++ multiple-inheritance unique-ptr

我有这段代码,我正在尝试从多个继承的类对象中分配基类的 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>();
}

最佳答案

这里的问题是继承树被搞乱了。如果你打算在 C 中使用来自 I 的多重虚拟继承,那么 AB 都必须虚拟继承它,否则 C 将以两个 I 子对象结束,从而导致转换问题:

class A : public  virtual I {
};

class B : public virtual I {
};

关于c++ - 如何从多个继承的类对象中分配 unique_ptr<base>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55781397/

相关文章:

c++ - 什么是 "visual studio 2008"的 unique_ptr 替换,没有第 3 个库(例如 boost)

java - java和C++之间枚举的区别?

c++ - 如何在没有确切类型信息的情况下从 void* 转换为虚拟基类?

c++ - Qt多重继承出错

C++类多重继承错误

c++ - 调整大小std::vector <std::unique_ptr <T >>的性能

c++ - Qt 项目中的 unique_ptr

c++ - 如果我再次调用 QProcess::start() 会发生什么?

c++ - 模板化检查是否存在类成员函数?

c++ - 在前向声明的类层次结构的 shared_ptr 之间进行转换