我有一个类,其中包含一个指向没有默认构造函数的对象的作用域指针数组。
我发现“初始化”它们的唯一方法就是使用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") ));
};
}
这感觉有点冗长和笨重。我错过了一种更聪明的方法吗?
答案 0 :(得分:15)
arr[0].reset(new Bar("ABC"));
arr[1].reset(new Bar("DEF"));
答案 1 :(得分:5)
最大的问题是没有办法在这里使用成员初始化列表初始化数组。
您可能希望使用类似ptr_vector
的专用指针容器:
struct Foo {
boost::ptr_vector<Bar> bars;
X() : bars(boost::assign::ptr_list_of<Bar>("ABC")("CDE")) {}
};
答案 2 :(得分:1)
使用typedef怎么样?
typedef boost::scoped_ptr<Bar> TBarPtr;
arr[0].swap(TBarPtr(new Bar("ABC"));
答案 3 :(得分:1)
一种解决方案:使用boost::ptr_vector代替数组。
您也可以使用编辑:我认为这不适用于scoped_ptr。std::vector<scoped_ptr>
并使用push_back
填充数组。