代码之家  ›  专栏  ›  技术社区  ›  Roddy

初始化boost::scoped\u ptr数组的正确方法?

  •  8
  • Roddy  · 技术社区  · 15 年前

    swap() 这样地:

    class Bar {
      Bar(char * message) {};
    }
    
    class Foo 
    {
      boost::scoped_ptr<Bar> arr[2];
    
      Foo()
      {
        arr[0].swap(boost::scoped_ptr<Bar>( new Bar("ABC") ));
        arr[1].swap(boost::scoped_ptr<Bar>( new Bar("DEF") ));
      };
    }
    

    这感觉有点冗长和笨拙。我错过了更聪明的方法吗?

    4 回复  |  直到 15 年前
        1
  •  15
  •   BlueRaja - Danny Pflughoeft    15 年前
    arr[0].reset(new Bar("ABC"));
    arr[1].reset(new Bar("DEF"));
    
        2
  •  5
  •   Georg Fritzsche    15 年前

    最大的问题是无法使用这里的成员初始值设定项列表来初始化数组。 您可能需要使用专门的指针容器,如 ptr_vector 取而代之的是:

    struct Foo {
        boost::ptr_vector<Bar> bars;    
        X() : bars(boost::assign::ptr_list_of<Bar>("ABC")("CDE")) {}
    };
    
        3
  •  1
  •   Lars    15 年前

    使用typedef怎么样?

    typedef boost::scoped_ptr<Bar> TBarPtr;
    arr[0].swap(TBarPtr(new Bar("ABC"));
    
        4
  •  1
  •   Mark Ransom    15 年前

    一种解决方法:使用 boost::ptr_vector

    你也可以用 std::vector<scoped_ptr> 并使用 push_back .