当向量访问实例时,shared_ptr的向量给出了seg错误

时间:2015-09-29 21:21:19

标签: c++ vector shared-ptr

我的shared_ptr<SomeClass>向量名为allParts

代码如下:

void function thisIsWhereItStarts(){
    vector<shared_ptr<SomeClass> > allParts;
    for(i=0;i<N;i++){
        allParts.push_back(function_which_returns_shared_ptr_someclass());
    }

// Then I use this vector as below:  
    for(vector<shared_ptr<SomeClass> >::iterator it = allParts.begin(); it!=allParts.end(); it++){
         (*it)->function_of_SomeClass() ; // THIS GIVES SEGMENTATION FAULT
    }
}

之前我曾多次使用过指针向量,但这是我第一次使用shared_ptr

返回shared_ptr的函数是这样的:

shared_ptr<SomeClass> function_which_returns_shared_ptr_someclass(){

    shared_ptr<SomeClass> part(new SomeClass);
    if(part->some_function(some_parameter)){
         return part;
    }else{
         return shared_ptr<SomeClass>();
    }

} 

1 个答案:

答案 0 :(得分:6)

push_back甚至是空shared_ptr。然后取消引用向量中的每个shared_ptr。取消引用空shared_ptr将失败。要么不要push_back空指针,要么不要取消引用它们。