1
我班有一個指針向量:升壓ptr_vector處理去除「引用」
ptr_vector<Class> vec;
而在一些「設置」方法,增加了一些類向量:中
void setupOrSomething()
{
vec.push_back(new Class(...));
....
}
現在客戶這個類可能希望自己的類對象添加到這個列表類:
void addThingToMyList(Class *cPointer)
{
vec.push_back(cPointer);
}
他們可能希望通過傳遞噸至刪除他同一個指針:
void removeThingFromMyList(Class *cPointer) { ... }
現在,如果我理解正確,閱讀這個答案(https://stackoverflow.com/a/357043/48998)後,我需要實現方法如下:
void removeThingFromMyList(Class *cPointer)
{
vec.release(std::find_if(vec.begin(),vec.end(),CheckPointerValue(cPointer)).release();
}
struct CheckPointerValue
{
CheckPointerValue(Class* c):cptr(c) {}
bool operator()(Class const& X) { return &X == cptr;}
private:
Class* cptr;
};
我明白我必須也呼籲釋放( )第二次在從ptr_vector.release()返回的auto_ptr上。
我是否正確假設這將確保此方法的調用方(RemoveThing ...)將保留對其Class對象的有效引用並且它不會被刪除?我只是想讓vec獲得臨時所有權,然後放棄它。