C ++打印析构函数

问题描述 投票:0回答:1

我第一次使用指针,我的代码正常运行,但是我需要从另一个.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;
}

...使用main.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";
}

但是,我还需要它来从我的node.cpp中打印析构函数,而无需更改main.cpp。这是析构函数:

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

任何建议,我们将不胜感激,谢谢。

c++ pointers binary-search-tree destructor
1个回答
1
投票

我假设通过打印您意味着执行析构函数。在这种情况下,每当您对对象调用delete时,编译器都会进行某种检查以确保一个析构函数存在于对象中,然后执行它。因此,在这种情况下,您将调用delete n;,其中n是您的节点。同样,当您调用remove node方法时,您也可以在该节点上调用delete,只要您确定链接列表和节点析构函数正确地处理了指针,以免破坏列表的顺序或导致其他更严重的问题,例如内存泄漏或指针悬空。

© www.soinside.com 2019 - 2024. All rights reserved.