그래서 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+
는 간단한 작업이된다 /다섯. 또한,'malloc'과'free'에'new []'와'delete []'를 선호하십시오. – chris전체적으로 NULL 매개 변수 검사와 철저히 설명되지 않은 반환 값은 말할 것도 없습니다. – WhozCraig
자신의 문자열 클래스를 작성하는 것은 좋은 학습 목적입니다 ...하지만 좋은 문자열 클래스를 작성하는 것은 간단한 작업이 아닙니다. –