【问题标题】:C++ Passing std::vector< boost::shared_ptr< foo > >C++ 传递 std::vector< boost::shared_ptr< foo >>
【发布时间】:2012-12-12 05:41:15
【问题描述】:

我目前正在学习 STL 和 boost 库的基础知识,需要一些帮助。让我首先描述一下我在哪里,我想构造一个 shared_ptrs 的向量,比如某个类 foo。以前我有一个数组或指针,需要使用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 > > >) 

【问题讨论】:

  • 函数是什么,构造函数又是什么,要对向量做什么?很大程度上取决于此。
  • 我想你想让你的构造函数公开。默认情况下它是私有的。

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


【解决方案1】:
  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 传递它。

【讨论】:

    猜你喜欢
    • 2012-11-27
    • 2014-01-11
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    • 2011-09-27
    • 2014-09-12
    • 1970-01-01
    • 2019-10-20
    相关资源
    最近更新 更多