0

我有一个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()

4

1 回答 1

3

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

于 2013-03-18T00:46:41.933 回答