提高ptr_vector处理去除"by reference"

boost ptr_vector handling removal "by reference"

本文关键字:by reference 处理 ptr vector 提高      更新时间:2023-10-16

我的类有一个指针向量:

ptr_vector<Class> vec;

在某些"设置"方法中,向量中添加了一些类:

void setupOrSomething()
{
    vec.push_back(new Class(...));
    ....
}

现在,此类的客户端可能希望将其 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上第二次调用 release((。

我是否正确假设这将确保此方法的调用者(RemoveThing...(将保留对其类对象的有效引用并且不会被删除?我只是想让vec获得临时所有权,然后放弃它。

是的,它们将保留指向有效实例的指针。 当然,他们需要知道指针首先引用一个有效的实例,并且指向该实例的指针存储在向量中。 如果不是,您将获得未定义的行为,并且可能是 seg 错误。