这就是我所拥有的:
class A
{
A(int i):_i(i){}
private:
int _i;
};
class B
{
B();
private:
std::vector< boost::shared_ptr<A> > _v;
}
我需要使用两个_v
来初始化boost::shared_ptr<A>
。
我试过了:
B::B():_v(2, boost::make_shared<A>(0)){}
但似乎两个指针指向唯一创建的对象 - 而不是我需要的东西。
我没有c++11
因此我无法使用:
B::B():_v{boost::make_shared<A>(0), boost::make_shared<A>(0)}{}
这种情况的最佳解决方案是什么?
答案 0 :(得分:2)
将vector
的创建移动到返回vector
。
使用2个元素复制vector
shared_ptr
的成本将会足够低,您无需关心,使用NRVO和RVO即使在C +中也可以完全优化+03。 (在C ++ 11中,如果NRVO和RVO因任何原因被阻止,它只会进行移动)。
// if you make it a member, make it `static`:
std::vector<boost::shared_ptr<A> > make_vector() {
std::vector<boost::shared_ptr<A> > retval;
retval.push_back( boost::make_shared<A>(0) );
retval.push_back( boost::make_shared<A>(0) );
return retval;
}
B::B():_v( make_vector() ) {}