1

私はC++にあまり精通していませんが、リンクリストを設計および実装するタスクがありました。これは私が渡したものです:

template <typename T>
struct Node
{
    Node() : next(nullptr) {}
    Node(T const & val) : next(nullptr), value(val) {}

    Node * next;
    T value;
};

template <typename T>
class LinkedList
{
    public:
        LinkedList()
        {
            begin_ = new Node<T>;
            current_ = begin_;
        }
        ~LinkedList()
        {
            delete begin_;
        }

        void insert(T const & value)
        {
            Node<T> * node = new Node<T>(value);
            node->next = current_->next;
            current_->next = node;
            current_ = current_->next;
        }

        void remove()
        {
            Node<T> * tmp = current_->next;
            if(!end())
            {
                current_->next = current_->next->next;
            }
            delete tmp;
        }

        bool end() const
        {
            return current_->next == nullptr;
        }

        void reset()
        {
            current_ = begin_;
        }

        void advance()
        {
            if(!end())
            {
                current_ = current_->next;
            }
        }

        T get() const
        {
            return current_->next->value;
        }

    private:
        Node<T> * begin_;
        Node<T> * current_;
};

delete begin_私は課題に合格しましたが、先生はデストラクタで下線を引き、 ~LinkedList()「これはリークします!」と書きました。その次。delete begin_どうしたら漏れるのか考えていたのですが、まだわかりません。誰かがこれを手伝ってくれませんか?

4

3 に答える 3

2

リスト内のすべてのノードを調べて削除する必要があります。次への別のポインタを保持し、現在のポインタを削除してから、先に進み、次のポインタがnullになるまで削除を続けます。

~LinkedList()
{
    Node * current = begin_;
    Node * aNext = begin_->next;

    while (null != aNext){
        delete(current);
        current = aNext;
        aNext = current->next;
    }
}

このようなもの。どこから始めているのかわからないが........

于 2012-06-17T19:07:06.953 に答える
0

nextノードのデストラクタでは、リスト内のすべてのノードを解放するために、にdeleteコマンドを送信する必要があります。

于 2012-06-17T19:07:31.650 に答える
0

私はあなたがこのようにそれをよりよく理解すると思います:

~LinkedList()
{
  reset();
  while(!end()) remove();
}
于 2012-06-17T19:13:29.103 に答える