gpt4 book ai didi

C++双向链表: How to show that Destructor is implemented correctly

转载 作者:行者123 更新时间:2023-11-30 02:19:58 24 4
gpt4 key购买 nike

基本上,我已经创建了一个双向链表,现在需要证明析构函数已在 main.cpp (int main) 中实现和测试。

作业中有人建议我应该创建一个函数,并放置一个 cout 语句,在每个节点被删除之前输出其地址。我不确定我应该怎么做。

到目前为止,我已经创建了这样一个函数:

void cList() {
DoublyLinkedList a
cout << "ex: 0 1 2 3" << endl;
for (unsigned i = 0; i < 4; i++) {
a.push_back(i);
}
cout << "Display in function: ";
a.display();
cout << endl;

//this shows the addresses of each node
cout << "delete addresses: " << endl;
for (it = del.begin(); it!=del.end(); ++it) {
cout << &it << endl;
}
}

我理解当列表超出范围时,将调用析构函数。我在 ~DoublyLinkedList 中有一个 cout 语句,上面写着“调用析构函数”。当我这样做时,在显示地址后输出“调用的析构函数”语句。但是如何通过在删除地址之前显示地址来满足要求?谢谢。

示例输出:

delete addresses:
0x7ffeb484d300
0x7ffeb484d300
0x7ffeb484d300
0x7ffeb484d300
Destructor Called

最佳答案

您的构造函数可以在创建对象时输出对象:

Node::Node()
{
std::cout << "Creating node: " << this << std::endl;
}

然后你的析构函数可以在它被销毁时输出相反的结果

Node::~Node()
{
std::cout << "Destroying node: " << this << std::endl;
}

那么您就不需要删除 main 中的任何内容。您只需确保 DoublyLinkedList 的析构函数通过并销毁所有 Node 对象。然后,当 DoublyLinkedList a 超出范围时,您将看到析构函数的输出。

关于C++双向链表: How to show that Destructor is implemented correctly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50194631/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com