使用指向Value?</value>的原始指针从std :: list <value>中删除

时间:2013-03-18 00:44:10

标签: c++ list stl

我有一个属于管理构造的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()可以采取的最有效的实施是什么?

1 个答案:

答案 0 :(得分:3)

简单:停止返回原始指针,并开始返回迭代器。然后,想要销毁一个的用户将传递创建它时收到的值,就像现在一样。解除引用仍然可以像使用原始指针一样工作。但擦除也会有效,并且效率很高。