提高ptr_vector处理去除"by reference"
boost ptr_vector handling removal "by reference"
我的类有一个指针向量:
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 错误。
相关文章:
- 转到特定页面后,如何将滑动视图的当前索引设置为选项卡栏"by reference"的当前索引?
- 为什么我们必须在C++中将值而不是地址传递到"call by reference"函数中?
- C 语言和 C++ 中的"pass by reference"究竟有什么区别?
- 无法找出 Java 等效的 "passing by reference" 在C++解决这个问题,以及最好的解决方法
- 为什么CPPCHECK说"Function parameter should be passed by reference"?
- std::thread pass-by-reference调用复制构造函数
- getters by reference和getters by copy这两个不同的词
- 为什么隐式"lambda to function pointer conversion"禁止"by reference"捕获静态成员?
- Lambda by reference
- C++:参数传递"passed by reference"
- 为什么程序员说"pass by reference"真的很"passing references by value?"为什么这很重要?
- 提高ptr_vector处理去除"by reference"
- 将特征类型与 boost::bind 一起使用是否会自动违反 Eigen 的"only pass by reference"规则?
- 除了语法,"call by reference"和"call by pointer"在内存方面C++有什么区别吗?
- 采用"pass by reference"值的递归函数的包装函数
- c++ Singleton by reference use
- "return-by-reference"或"pass-by-reference"参数何时与constexpr兼容?
- 如何在 C 语言中模仿C++ "pass array(pointer) by reference"?
- 两个方法声明都"pass by reference"吗?
- Visual Studio 2010 - C++ 函数在销毁后返回有效的'by reference'对象