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見えます。1 つはポインターの代わりにイテレーターを使用し、後者は値全体を使用しますValues。ポインターを確実に使用してターゲットを見つけることができます。

私の質問は、最も効率的な実装は何destroyValue()ですか?

4

1 に答える 1

3

シンプル: 生のポインタを返すのをやめて、イテレータを返し始めます。次に、それを破棄したいユーザーは、今と同じように、作成時に受け取った値を渡します。また、逆参照は、生のポインターの場合と同様に機能します。しかし、消去も機能し、効率的です。

于 2013-03-18T00:46:41.933 に答える