Итак, я изучал ООП на C++, и я подумал, что было бы хорошей практикой написать собственный собственный класс строк (для учебных целей, конечно). У меня возникла проблема, которую я не знал, как ее решить. Ниже приведен код заказа:Избегайте утечки памяти
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, выделяя больше памяти, и я не мог найти способ, как я могу его освободить.
Вы должны быть следуя правилу трех /5. Кроме того, предпочитайте 'new []' и 'delete []' to 'malloc' и' free'. – chris
Не говоря уже о полном параметре LULT NULL, который проверяет и возвращает значения, которые полностью отсутствуют. – WhozCraig
Написание собственного строкового класса - хорошая вещь для учебных целей ... но написать хороший класс строк - непростая задача. –