也许我对此的理解存在缺陷。我的理解是,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>&
返回会产生此错误,即使B
是A
的公开孩子:
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;
^~~~~