gpt4 book ai didi

c++ - 重载 + 运算符

转载 作者:行者123 更新时间:2023-11-27 23:30:59 25 4
gpt4 key购买 nike

当我在这个构造函数中创建一个新的字符串数组时,调试器给我“错误的 ptr”,但只有当我的重载运算符方法创建一个新的 MyString 对象时...感到困惑。

这是我的构造函数

MyString::MyString()
{
stringSize = 0;
stringCap = 16;
stringArray = new char[stringCap + 1];
stringArray[0] = '\0';
}

这是我的重载运算符方法

MyString operator+(const char* leftOp, const MyString& rightOp)
{
MyString result; // new object used to store result
result.stringSize = strlen(leftOp) + rightOp.stringSize;
// if the string does not fit in the array
if( result.stringSize > result.stringCap )
{
delete[] result.stringArray;
result.stringCap = ( result.stringSize + 15 ) & ~15;
result.stringArray = new char[result.stringCap + 1];
}
strcpy(result.stringArray, leftOp);
strcat(result.stringArray, rightOp.stringArray);
return result;
}

这是我的复制构造函数,调试器永远不会得到它

MyString::MyString(const MyString& s)
{
stringSize = s.stringSize;
stringCap = s.stringCap;
//stringArray[stringCap + 1];
stringArray = new char[stringCap + 1];
stringArray = s.stringArray;
}

最佳答案

好吧,当这个方法返回时,“result”将被复制并销毁原来的。如果析构函数删除数组,并且没有智能复制构造函数确保新拷贝包含有效的新数组,那么您将遇到问题。

但是你说编译器说了一些关于错误指针的事情——在哪里?什么线路?

关于c++ - <bad ptr> 重载 + 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5451695/

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