gpt4 book ai didi

c++ - 赋值运算符不应该返回 "empty"实例?

转载 作者:行者123 更新时间:2023-11-30 01:09:57 26 4
gpt4 key购买 nike

我正在实现一个堆栈只是为了练习。所以,总的来说,我有这样的东西:

Stack stack;
stack.push(element1;
stack.push(element2);

Stack copy;
copy = stack;

所以我要重载赋值运算符,因为我还想生成新的元素实例(而不仅仅是将每个元素的指针从一个元素复制到另一个元素),如下所示

Stack &Stack::operator=(const Stack &toCopy) {
Stack* stack = new Stack;
if (toCopy.first == NULL) return *stack;
for (Node* actual = toCopy.first; actual != NULL; actual = actual->sig) {
stack->push(actual->elem);
}
// In this state, *stack has 2 elements as it should
return *stack;
}

回到 main 中,复制变量没有得到更改......它仍然是空的,就好像赋值从未发生过一样。好像我只是做了 Stack copy; 你能解释一下这里发生了什么吗?

最佳答案

您没有修改当前对象(即 *this)。

您只是通过new 创建一个新对象,然后返回它。注意copy = stack;,等同于copy.operator=(stack);,注意返回值没有被使用,只是被丢弃(并导致内存泄漏), copy 没有改变。

你应该这样做:

Stack &Stack::operator=(const Stack &toCopy) {

// do some work to clear current elements in *this
// ...

// add elements from toCopy
for (Node* actual = toCopy.first; actual != NULL; actual = actual->sig) {
this->push(actual->elem);
}

// operator= is supposed to return *this in general
return *this;
}

关于c++ - 赋值运算符不应该返回 "empty"实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39157390/

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