我有一个std::list<Value>
属于管理构造的,Value *
每当调用工厂方法时都会分发指针。Value
当需要销毁这些指针时,这些指针会传回给管理器。但是,我不确定如何最好地使用这些指针来查找和擦除/删除元素。
class ValueManager{
public:
Value * createValue(ValueDef & def) {
m_valueList.push_back( Value( def ) );
return &m_valueList.back();
}
void destroyValue(Value * target) {
// Mystery!
// How does one remove/erase a list element
// with only a pointer to it's value?
}
private:
std::list<Value> m_valueList;
};
两者似乎都不适合该任务::erase
,::remove
一个采用迭代器而不是指针,而后者采用整个值,这是无法完成的,因为在这种情况下,没有可接受的 == 之间Values
的比较方法,只有指针可以可靠地用于查找目标。
我的问题是,最有效的实施方式是什么destroyValue()
?