使用构造函数中的引用创建boost :: shared_ptr

时间:2016-03-04 09:48:20

标签: boost shared-ptr c++03

我有以下案例:班级" B"继承自班级" A"。班级" C"引用了#34; A",它在构造函数中传递给它。在课堂上" D",我想使用课程" C",但我只提及" B"。目前我正在使用标准指针,但我需要迁移到boost :: shared_ptr。

class A {...};

class B: public A {...};

class C {
 public:
  C(A& _a)
   : a(_a)
   {...}

 private:
  A& a;
};

class D
{
  private:
   B& b;
   void someFunc()
   {
     C* c1 = new C(b); // Working
     boost::shared_ptr<C> c2 = boost::make_shared<C>(b); // not working: "cannot convert const B in A&" error
   }
};

我的问题:我如何包装/转换/解析/无论实例&#34; b&#34;,以便正确创建shared_ptr?

通过上面的实现,我得到了一个&#34;无法转换A&amp;&#34;中的const B.错误。

感谢您的支持。

1 个答案:

答案 0 :(得分:3)

自己找到解决方案:我需要将它包装在boost :: ref中,即

boost::shared_ptr<C> c2 = boost::make_shared<C>(boost::ref(b));