有人可以解释为什么在此示例中转换为引用类型失败了吗?
我想使用boost::scoped_ptr
作为缺少std::unique_ptr
的解决方法。
struct A{};
struct B
{
B(boost::scoped_ptr<A>& a) { m_a.swap(a); }
boost::scoped_ptr<A> m_a;
};
void f()
{
B b(boost::scoped_ptr<A>(new A));
}
gcc失败了:
note: no known conversion for argument 1 from ‘boost::scoped_ptr<A>’
to ‘boost::scoped_ptr<A>&’
设计原理(为什么首先使用scoped_ptr):
答案 0 :(得分:4)
你不能像在这里那样将非常量左值引用绑定到临时值
B b(boost::scoped_ptr<A>(new A));
您可以通过传递左值来解决该特定问题:
void f()
{
boost::scoped_ptr<A> a(new A);
B b(a);
}