C ++:std :: unique_ptr&不承认继承?

时间:2017-04-11 17:19:33

标签: c++

也许我对此的理解存在缺陷。我的理解是,unique_ptr<A>允许您使用B初始化它,只要B来自A。 但是,当从返回unique_ptr<B>的函数返回unique_ptr<A>&时,我似乎无法使其工作。 这是我正在使用的代码的一个非常愚蠢的例子:

struct A
{
    int a;
    A(int a) : a (a) {}
};
struct B : public A
{
    B(int b) : A (b+1) {}
};

struct Hi
{
    std::unique_ptr<A> a_ptr;
    std::unique_ptr<B> b_ptr;

    Hi()
    {
        a_ptr = std::unique_ptr<A> (new A(7));
        b_ptr = std::unique_ptr<B> (new B(16));
    }

    std::unique_ptr<A>& GetPtr(int foo)
    {
        if(foo < 10)
            return a_ptr;
        else
            return b_ptr;
    }
};

int main()
{
    Hi hi;
    return hi.GetPtr(11)->a;
}

b_ptr作为std::unique_ptr<A>&返回会产生此错误,即使BA的公开孩子:

src/core/memory/../rom/Rom.h:74:18: error: non-const lvalue reference to type
  'unique_ptr<A>' cannot bind to a value of
  unrelated type 'unique_ptr<B>'
    return b_ptr;
           ^~~~~

0 个答案:

没有答案