【发布时间】:2019-09-06 17:06:12
【问题描述】:
我在编译重载运算符时遇到指针异常。异常显示“抛出异常:写访问冲突。 TempString.Pointer 是 0x1110112。”我希望操作员将两个自定义字符串合二为一。
重载运算符:
MyString MyString::operator+(MyString &String) {
MyString TempString;
TempString.StringLength = this->StringLength + String.StringLength;
for (int i = 0; i < this->StringLength + String.StringLength - 1; i++) {
if (i < this->StringLength) {
TempString.Pointer[i] = this->Pointer[i]; // Exception pops up here
}
else {
TempString.Pointer[i] = String.Pointer[i];
}
}
return TempString;
};
构造函数:
MyString::MyString() {
StringLength = 0;
Pointer = nullptr;
}
MyString::MyString(char* String) {
Pointer = String;
for (int i = 0; Pointer[i]; i++) {
StringLength++;
}
}
Main.cpp:
#include "MyString.h"
#include <iostream>
int main() {
char String1[] = "abcdef";
MyString NewString(String1);
char String2[] = "cdefa";
MyString SubString(String2);
MyString BrandNewString(NewString + SubString);
cout << BrandNewString.GetStringLength() << endl;
system("pause");
return 0;
}
【问题讨论】:
-
Pointer = String;非常非常非常危险。当您“空”它(或其类死亡)时,如果相同的指针存储在其他类中,它将变得无效。请改用std::shared_ptr。 -
您没有处理分配和解除分配。您对指针所有权有疑问。封装对于使这些成为可能很重要。
-
这看起来也不像 operator+ 的正常签名。对于你的水平,你有太多的概念在起作用。您应该遵循教科书。
标签: c++ class oop exception operator-keyword