正确初始化boost :: scoped_ptr数组的方法?

Rod*_*ddy 8 c++ boost smart-pointers

我有一个类,其中包含一个指向没有默认构造函数的对象的作用域指针数组.

我发现"初始化"它们的唯一方法就是这样使用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") ));
  };
}
Run Code Online (Sandbox Code Playgroud)

这感觉有点冗长和笨重.我错过了一种更聪明的方法吗?

Blu*_*eft 15

arr[0].reset(new Bar("ABC"));
arr[1].reset(new Bar("DEF"));
Run Code Online (Sandbox Code Playgroud)


Geo*_*che 5

最大的问题是没有办法在这里使用成员初始化列表初始化数组.您可能希望使用专门的指针容器,ptr_vector而不是:

struct Foo {
    boost::ptr_vector<Bar> bars;    
    X() : bars(boost::assign::ptr_list_of<Bar>("ABC")("CDE")) {}
};
Run Code Online (Sandbox Code Playgroud)