C ++传递std :: vector<升压:: shared_ptr的< foo> >

时间:2012-12-12 05:41:16

标签: c++ class stl vector shared-ptr

我目前正在学习STL的基础知识并提升图书馆并希望得到一些帮助。让我先描述一下我在哪里,我想构建一个类foo的shared_ptrs向量。以前我有一个数组或指针,需要使用newdelete来处理内存,并认为过渡到向量和智能指针是个好主意。我目前有类似的东西:

class foo{
 ....
}

int main(){
 std::vector< boost::shared_ptr< foo > > vec_ptr;
 vec_ptr.push_back(boost::make_shared<foo>);
 ....
} 

现在我想知道如何在两种情况下最好地传递此向量:   - 进入一个功能。   - 进入类对象的构造函数(通过初始化列表初始化对象。

进入函数我猜它最好通过引用传递,如:

void func(std::vector< boost::shared_ptr < foo > >& vec_ptr_in_func){
  ....
}

进入类构造函数我不确定我的初始猜测是否像

class vec_class{
 vec_class(std::vector< boost::shared_ptr < foo > >& vec_ptr_in_class_)
  : vec_ptr_in_class(vec_ptr_in_class_){...}
}

但这似乎是错误的:

no matching function for call to vec_class::vec_class(std::vector< boost::shared_ptr < foo >, std::allocator<boost::shared_ptr< foo > > >) 

1 个答案:

答案 0 :(得分:0)

  1. 对于函数传递类似

    // If you intend to modify the vec_ptr_in_func   
    void func(std::vector< boost::shared_ptr < foo > >& vec_ptr_in_func){
    
    }
    
    
    // If you intend to not modify the vec_ptr_in_func   
    void func(const std::vector< boost::shared_ptr < foo > >& vec_ptr_in_func){
    
    }
    
  2. 通过构造函数的const-reference传递它。