c ++:将构造函数中shared_ptr的向量初始化为不同的指针

时间:2013-10-09 18:30:44

标签: c++ vector shared-ptr

这就是我所拥有的:

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)}{}

这种情况的最佳解决方案是什么?

1 个答案:

答案 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() ) {}