代码之家  ›  专栏  ›  技术社区  ›  Stefan Riesen

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

  •  3
  • Stefan Riesen  · 技术社区  · 9 年前

    我有以下情况:类“B”继承自类“A”。类“C”具有对“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
       }
    };
    

    我的问题:我需要如何包装/cast/derefrence/任何实例“b”,以便正确创建shared_ptr?

    通过上面的实现,我得到了一个“无法在A&中转换常量B”错误

    感谢您的支持。

    1 回复  |  直到 9 年前
        1
  •  3
  •   Stefan Riesen    9 年前

    我自己找到了解决方案:我需要将其包装为boost::ref,即。

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