= operator overloading 질문요....
글쓴이: kknd345 / 작성시간: 일, 2005/05/15 - 1:38오후
void HugeInt::operator = (const HugeInt& h) { char* temp; temp = new char( strlen( this->name)+1 ); strcpy( temp, this->name); memcpy( this, &h, sizeof(HugeInt) ); strcpy( this->name, temp ); delete temp; }
Quote:
Debug Error!
Program:........exe
DAMAGE: after Normal block (#52) at 0x00431A50.(Press Retry to debug the application )
중단(A) 다시 시도(R) 무시(I)
디버그 해보니 delete temp 부분에서 에러 나네요.
왜 그런건가요?
PS)
요즘 질문을 너무 많이 하네요 ㅜㅜ... 나름대로 찾아보고 안되면 올리는데도 많네요.... 죄송합니다. 이해좀 해주세요 ㅜㅜ.. 과제는 빡시고 도움 받을 곳은 여기밖에 없네요.
( 여기 분들이 답변 하나는 정말 잘해주십니다 ^^~ 감사합니다. )
Forums:
우선[code:1]temp = new char( strle
우선
temp = new char( strlen( this->name)+1 );
은temp = new char[ strlen( this->name)+1 ];
입니다.
따라서
delete temp;
는delete[] temp;
로 바꾸시면 됩니다.그리고
memcpy( this, &h, sizeof(HugeInt) );
는 올바른 방법이 아닙니다. 멤버 하나 하나 복사 해주셔야 합니다.
그리고 문자열을 표현하기 위해 c string 보다는 std::string을 사용하시는 것이 인생이 편해집니다.
그리고 operator= 의 올바른 overloading의 올바른 형식은
T& operator=( const T& )
입니다.
그리고 exception safe하고 일반적인 표현 방법은 다음과 같은 형태가 권장되고 있습니다.
여기서 swap()은 실패하지 않아야 합니다. 이와 관계된 내용은 Herb Sutter 등의 책을 참조하시면 많이 나옵니다.
----------------------------------------
http://moim.at
http://mkhq.co.kr
댓글 달기