我有一个属于管理构造的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()
可以采取的最有效的实施是什么?
答案 0 :(得分:3)
简单:停止返回原始指针,并开始返回迭代器。然后,想要销毁一个的用户将传递创建它时收到的值,就像现在一样。解除引用仍然可以像使用原始指针一样工作。但擦除也会有效,并且效率很高。