0

私は現在、STLとBoostライブラリの基本を学んでおり、支援を求めています。最初に、私がどこにいるのかを説明しましょう。たとえば、あるクラスfooのshared_ptrsのベクトルを作成したいと思います。以前は配列またはポインターがあり、メモリを使用newおよびdelete処理する必要があり、ベクトルとスマートポインターへの移行は良い考えだと思いました。私は現在次のようなものを持っています:

class foo{
 ....
}

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

ここで、2つの状況でこのベクトルを渡すのに最適な方法を知りたいと思います。-関数に。-クラスオブジェクトのコンストラクターに(初期化リストを介してオブジェクトを初期化します)。

関数に、次のように、参照によって渡すのが最適だと思います。

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 > > >) 
4

1 に答える 1

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 参照で渡します。

于 2012-12-12T06:51:21.407 に答える