0

std::shared_ptr を反復処理する反復子があります。そのため、operator++ は、内部に格納された共有ポインターを次の項目にポイントします。

template<class IT>
class MyIterator
{
public:
    ...

    MyIterator& operator++()
    {
        _i = ... // Call factory
        return *this;
    }
private:
    std::shared_ptr<IT> _i;
};

operator*() および operator->() 演算子はどのように実装すればよいですか?

イテレータが NULL を指しているかどうか、つまり、内部共有ポインタが NULL を指しているかどうかをテストするにはどうすればよいですか。

4

1 に答える 1

2

ユーザーがクラスのインスタンスを参照できる状況を定義する必要があります。通常、これは「終了イテレータまたは初期化されていないイテレータ以外のもの」です。

次に_i、逆参照できるインスタンスの null ポインターが決して含まれないようにする必要があります。

operator*これは、ユーザーが呼び出しを許可されていないかoperator->、そのような状況にあるため、チェックの必要がないことを意味します。たとえば、デバッグ用に追加できますassert(_i.get());

イテレータの を指定しませんvalue_typeが、 であると仮定するとIT、次のように実装できます。

IT &operator*() { return *_i; }
shared_ptr<IT> operator->() { return _i; }
// or
IT *operator->() { return _i.get(); }
于 2012-07-06T12:10:12.240 に答える