shared_ptr 的向量在访问向量中的实例时给出段错误
Vector of shared_ptr gives seg fault when instances in vector accessed
我有一个名为 allParts
的向量 shared_ptr<SomeClass>
。
代码如下:
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
。
returnsshared_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>();
}
}
你push_back
连个空shared_ptr
。然后你取消引用向量中的每个 shared_ptr
。取消引用空 shared_ptr
将失败。要么不要 push_back
空指针,要么不要取消引用它们。
我有一个名为 allParts
的向量 shared_ptr<SomeClass>
。
代码如下:
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
。
returnsshared_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>();
}
}
你push_back
连个空shared_ptr
。然后你取消引用向量中的每个 shared_ptr
。取消引用空 shared_ptr
将失败。要么不要 push_back
空指针,要么不要取消引用它们。