C ++ Print Destructor - PullRequest
       48

C ++ Print Destructor

0 голосов
/ 01 мая 2020

Я впервые использую указатели, мой код работает правильно, но мне нужно напечатать деструктор из другого файла. cpp и я не знаю, как это сделать.

После того, как узел отбрасывается с помощью этих двух функций:

bool LList::remove(node* r) {
    if (r == NULL || search(r->key) == NULL) {
        return false;
    }
    if (r == head) {
        head = head->next;
    }
    else {
        node* prev = getb4(r);
        prev->next = r->next;
    }
    r->next = NULL;
    return true;
}
bool LList::drop(int k) {
    node* currentNode = search(k);
    if (currentNode == NULL || !remove(currentNode))
        return false;
    node* tmp = currentNode;
    while (tmp != NULL) {
        currentNode = currentNode->dup;
        remove(tmp);
        tmp = currentNode;
    }
    return true;
}

... он правильно печатает «(ключ) удален», используя эту функцию из основного. cpp.

void testDrop(LList& L) {
    int key;
    cout << "Enter key:  ";
    cin >> key;
    if (L.drop(key))
        cout << key << " removed\n";
    else
        cout << key << " not found in list\n";
}

Однако, Мне также нужно, чтобы он распечатал деструктор из моего узла. cpp, не меняя основной. cpp. Вот деструктор:

node::~node() {
    if (next) delete next;
    if (dup) delete dup;
    cout << "NODE DESTRUCT: key=" << key << " data=" << data << endl;
}

Любой совет будет оценен, спасибо.

1 Ответ

1 голос
/ 02 мая 2020

Я предполагаю, что под печатью вы подразумеваете выполнение деструктора. В этом случае всякий раз, когда вы вызываете delete для объекта, компилятор сортирует проверки, чтобы убедиться, что деструктор присутствует в объекте, а затем выполняет его. Так что в этом случае вы бы назвали delete n;, где n - ваш узел. Также, когда вы вызываете метод удаления узла, вы также можете вызвать удаление на этом узле, если вы уверены, что ваш связанный список и деструктор узла должным образом заботятся о указателях, чтобы не испортить порядок вашего списка или вызвать любые другие более серьезные проблемы, такие как утечки памяти или свисающие указатели.

...