0

クラス HashMap があり、すべて正常に動作しているように見えますが、メモリリークに問題があります。

以下は私の HashMap クラスのプライベートメンバー変数/関数です

   struct Node
    {
        std::string key;
        std::string value;
        Node* next;
    };

    HashFunction hashfunction;
    Node** bucketList;
    int* numberOfPairs; 
    int logins;
    int lengthOfMap;

そして、ここに私のデフォルトのコンストラクターがあります:

 HashMap::HashMap()
    :hashfunction(hash), bucketList(bucketList = new Node*[INITIAL_BUCKET_COUNT]), numberOfPairs(numberOfPairs = new int[INITIAL_BUCKET_COUNT]),
    logins(0),lengthOfMap(INITIAL_BUCKET_COUNT)
{
    for(int i = 0; i < INITIAL_BUCKET_COUNT; i ++)
    {
        bucketList[i] = nullptr;
    }
    zeroFillArray(numberOfPairs, INITIAL_BUCKET_COUNT);
}

ノードの配列を指すbucketListポインターがあり、各ノードはリンクされたリストの先頭を指します。

今のところ、これは私のデストラクタです:

HashMap::~HashMap() 
{
    delete numberOfPairs;
    delete bucketList;
}

リストを削除する前に、リスト内の各ノードを削除しますか (朝にこれに取り組みますが、関係なく質問したかったのですが)、それとも他の何かが完全に欠落していますか?

4

2 に答える 2

3
HashMap::~HashMap() 
{
    for(int i = 0; i < INITIAL_BUCKET_COUNT; i ++)
    {
        Node* node  = bucketList[i];
        while( node != nullptr)
        {
            Node* next = node->next;
            delete node;
            node = next;
        }
    } 
    delete numberOfPairs;
    delete[] bucketList;
}
于 2013-11-15T09:11:34.660 に答える