所以我在学习 C++ 中的 OOP,我认为编写自己的字符串类(当然是为了学习目的)是一个很好的实践。我想出了一个我不知道如何解决的问题。这是一些安静的代码:
class String {
char *str;
public:
String(char const *str);
~String();
String operator + (char const *str);
};
String::String(char *str) {
this->str = _strdup(str);
}
String::~String() {
free(this->str);
}
String String::operator+(char const *str) {
char *temp = (char *) malloc(strlen(str) + strlen(this->str) + 1);
strcpy(temp, this->str);
strcat(temp, str);
return temp;
}
这里的问题是,这段代码会导致内存泄漏。从“operator +”返回调用我的构造函数,它通过分配更多内存来复制 temp,但我找不到任何释放它的方法。
最佳答案
你的 operator +
被定义为返回一个 String
但你返回的是一个 char*
这意味着编译器正在使用隐式转换它构造函数。这会复制字符串,但不会释放您因此泄漏的原始字符串。
正如其他人所建议的那样,您可以做很多事情来改进代码,但是要修复实际的泄漏,您可以这样做:
String String::operator+(char const *str) {
char *temp = (char *) malloc(strlen(str) + strlen(this->str) + 1);
strcpy(temp, this->str);
strcat(temp, str);
String strTmp(temp);
free(temp);
return strTmp;
}
关于c++ - 避免内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15536003/