gpt4 book ai didi

c++ - 这个赋值运算符重载会出现什么问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:36:38 25 4
gpt4 key购买 nike

我的程序在尝试将一个对象分配给另一个对象时崩溃了,你们看到这有什么问题吗?

变量是:

Field *fields[50];
int numOfFields;
int currentField;

函数是:

Screen& operator=(Screen &scr) {
if (this != &scr){
for (int i = 0; i < 50; i++)
fields[i] = NULL;

for (int i = 0; i < scr.numOfFields; i++)
fields[i] = scr.fields[i];

numOfFields = scr.numOfFields;
currentField = scr.currentField;
}

return *this;
}

最佳答案

一个问题可能是 scr.numOfFields 超出了目标对象中的字段数。

另一个问题是,或者至少看起来,您正在为新对象分配指针。这意味着您将在程序中两次引用同一位置。如果它在一个地方被删除而另一个地方不知道会怎样?当您尝试访问内存时,您会遇到段错误。

如果你有 Boost,你可以使用他们的共享指针来帮助避免这种情况:http://www.boost.org/doc/libs/1_43_0/libs/smart_ptr/smart_ptr.htm

关于c++ - 这个赋值运算符重载会出现什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3081507/

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