이것은 C++ 연산자 오버로딩을 연구하기 위해 코딩 한 간단한 예제입니다. 코드를 실행하면 코드 c = a + b에 멈 춥니 다. 그리고 나는 그것이하여 HelloWorld를 출력 않습니다 할당 연산자 오버로드 기능에 cout << ptr << '\n';
를 넣으면 제어는 결코 디버깅의 일환으로 c.display();
이 코드가 위에서 언급 한 장소에서 멈추는 이유는 무엇입니까?
에 도달하지 않기 때문에 문자열의 형식이 잘못 될 것 같지 않습니다.
왜 그 때 걸려 있습니까? 나는 무엇이 없는가 ??
class mystring
{
char *ptr;
public:
mystring(char *str = "")
{
ptr = new char[strlen(str) + 1];
strcpy(ptr,str);
}
mystring operator +(mystring s)
{
char *str = new char[strlen(ptr) + strlen(s.ptr) + 1];//where should this memory be freed
strcpy(str,ptr);
strcat(str,s.ptr);
return mystring(str);
}
void operator =(mystring s)
{
strcpy(ptr,s.ptr);
//cout << ptr << '\n'; \\Debug - this prints out HelloWorld but still hangs
}
void display()
{
cout << ptr << '\n';
}
~mystring()
{
delete [] ptr;
}
};
int main()
{
mystring a="Hello",b="World",c;
c = a + b;
c.display();
getchar();
}
편집 : 컴파일러 : MS-비주얼 C++ 2010 익스프레스/윈도우.
'운영자 :
및 운영자를 = 당신이 필요로하는 것은 메모리를
을 할당 실패
이 (가) 다음을 수행 '는 메모리를 할당하지 않습니다. 'operator +'는 두 번 할당합니다. –
나는 또한 적절한 복사 생성자를 구현해야한다고 덧붙인다. – Nim
valgrind와 같은 메모리 프로파일 러는 이런 종류의 메모리 오류를 발견했을 것이다. – Francois