我正在尝试std::reference_wrapper
在另一个向量的所有元素上使用。但是当我删除原始元素时,我想自动删除引用向量中的元素。我做了一些解决方法,但它们很难看。有什么建议么?
#include <iostream>
#include <list>
struct A
{
A(int x) : x(x){}
int x;
};
std::list<std::reference_wrapper<A>> listRef;
struct B
{
std::list<A> l;
B()
{
l.emplace_back(42);
listRef.emplace_back(l.back());
}
void foo()
{
customRemove(l.back());
}
void customRemove(const A & obj)
{
//l.remove(obj); // Error: binary '==': no operator found which takes
//a left-hand operand of type 'A' (or there is no acceptable conversion)
// so I did
l.remove_if([&](const A & obj2) { return &obj == &obj2; });
// is there a way to automatically remove dangling references?
listRef.remove_if([&](const A & obj2) { return &obj == &obj2; });
}
};
int main()
{
B b;
std::cout << listRef.size() << '\t' << b.l.size() << '\n'; // prints 1 1
b.foo();
std::cout << listRef.size() << '\t' << b.l.size() << '\n'; // prints 0 0
}