カスタムイテレータの->
演算子を実装しようとしています。しかし、私はそれらを正確に定義する方法を知りません。カスタムイテレータ演算子オーバーロード
私のイテレータクラスとMapNodeは次のように定義されています。
template <typename Key_T,typename Mapped_T>
class Map<Key_T,Mapped_T>::Iterator
{
MapNode<Key_T,Mapped_T>* curr;
}
template <typename Key_T,typename Mapped_T>
class MapNode
{
Key_T key;
Mapped_T value;
MapNode *up,*down,*prev,*next;
friend class Map<Key_T,Mapped_T>;
};
は、今私は> operator-をオーバーロードしたいのですが、問題は、私は正確にキーのペアと価値イテレータのポインタを返す方法を取得しておりませんで現在指している:「
template <typename Key_T,typename Mapped_T>
std::pair<const Key_T, Mapped_T>*
Map<Key_T,Mapped_T>::Iterator::operator->() const
{
const Key_T currKey = (this->curr)->key;
const Mapped_T currVal = (this->curr)->value;
ValueType* vt = new ValueType(std::make_pair(currKey,currVal));
return vt;
}
しかし、私はValueTypeにポインタメモリが勝ったとして、これがメモリリークの原因となることを恐れています:
私の現在の実装でありますこれまで割当てを解消することはできません。
これはどのように正しく行うことができますか?
助けてください。
[ValueType is defined as std::pair<const Key_T, Mapped_T>]