gpt4 book ai didi

c++ - 对象在返回之前销毁了自己? C++

转载 作者:行者123 更新时间:2023-11-28 06:45:31 25 4
gpt4 key购买 nike

所以我做了这个排序的双向链表代码。我应该让几个运算符(operator)重载。但是,当我尝试在其中一个函数中创建一个新的 SDL(双排序列表)时,它会在我设法将其返回到主函数之前自行销毁。我试着调试了很多次。我看到错误发生的地方,但我不知道如何解决它。这里是代码的地方,事情搞砸了。

SortedDoublyLinkedList SortedDoublyLinkedList::operator+(const SortedDoublyLinkedList &    otherList)
{
SortedDoublyLinkedList myNewList(otherList);
Node *currentNode = head;
while (currentNode) {
myNewList.add(currentNode->value);
currentNode = currentNode->next;
}
return myNewList; // destroys itself
}

当编码器编写“mylist = mylist + mylist2”以将 2 个列表加在一起时,上述函数将过载。

这是另一个:

SortedDoublyLinkedList SortedDoublyLinkedList::operator+(const int & myNumber)
{
SortedDoublyLinkedList myNewList(*this);
myNewList.add(myNumber);
return myNewList; // destroys itself
}

同样的交易。

测试用例如下:

我的列表+=我的列表2;//正常工作!

我的列表 += 我的列表 + 15;//正常工作!

SortedDoublyLinkedList myList3 = myList + 15;//在不修改 myList 的情况下创建一个新列表,工作正常!

用户输入时发生错误:

我的列表 = 我的列表 + 我的列表 2;

我的列表 = 我的列表 + 15;

我不知道为什么会这样。在上面的两个函数中,myNewList 会在返回之前销毁自己,然后在程序的最后,它会再次尝试销毁自己(什么?)但是因为它已经被释放,所以销毁它会失败,然后会弹出一个错误向上。

最佳答案

您有一个复制赋值运算符,只能分配单个数字,而不是复制整个列表。如果你想将一个列表分配给另一个列表,你需要一个适当的复制赋值运算符来执行深层复制。

当你做的时候

myList = myList + myList2;

编译器会把它翻译成

myList.operator=(myList + myList2);

您可能还想阅读有关 the rule of three 的内容.

关于c++ - 对象在返回之前销毁了自己? C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25078919/

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