gpt4 book ai didi

c++ - boost::scoped_ptr 到引用的转换失败

转载 作者:行者123 更新时间:2023-11-30 01:52:48 26 4
gpt4 key购买 nike

谁能解释为什么这个例子中引用类型的转换失败了?我想使用 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):

  • 不想使用原始指针,因为异常安全(现实世界的场景涉及多个对象被传递)
  • 不想使用 auto_ptr,因为可能会导致静默释放失败
  • 无法使用 unique_ptr,因为仍然坚持使用 C++03
  • 使用 shared_ptr 可能是有效的解决方法,但看起来不干净,因为没有共享任何东西,真的

最佳答案

您不能像此处那样将非常量左值引用绑定(bind)到临时值

B b(boost::scoped_ptr<A>(new A));

您可以通过传递左值来解决该特定问题:

void f()
{
boost::scoped_ptr<A> a(new A);
B b(a);
}

关于c++ - boost::scoped_ptr 到引用的转换失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23997765/

26 4 0
文章推荐: java - List 和 List 之间有什么区别?