gpt4 book ai didi

c++ - boost ptr_vector 处理删除 "by reference"

转载 作者:太空宇宙 更新时间:2023-11-04 12:08:55 24 4
gpt4 key购买 nike

我的类有一个指针 vector :

ptr_vector<Class> vec;

并且在一些“设置”方法中向 vector 添加了几个类:

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 再次调用 release()。

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

最佳答案

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

关于c++ - boost ptr_vector 处理删除 "by reference",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10670338/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com