1. struct와 class가 다른 점은 디폴트 접근 권한과 상속 유형이 각각 public, private이라는 점뿐입니다.
2. 복사생성자, 대입연산자, 소멸자는 따로 정의하지 않으면 컴파일러가 자동으로 만들어 줍니다.
(이들을 The Big Three라고 부르기도 합니다.) 이때 멤버가 클래스 형이면(지금의 DATA::str 같은)
해당 클래스의 복사생성자, 대입연산자, 소멸자를 호출하여 생성, 대입, 소멸을 수행합니다.
d2 = d1은 (자동적으로 만들어진) DATA::operator=()을 호출하고 그 안에서
다시 tstring::operator=()을 호출하지요. 결국 모든 것이 잘 된다는 뜻이죠. :)
C처럼 memcpy로 복사하지는 않으며 그래서도 안되겠죠.
CString은 저도 잘 안써봐서 모르겠는데 실행 오류가 발생한다면 아마 The Big Three 중에
문제가 있을 것 같습니다.
아참, 그리고 std::string은 소멸자가 가상이 아니므로 tstring을 다형적으로
사용하시면 안됩니다.
CString에서도 문제가 없어야 정상인데요. :shock:
CString에서도 문제가 없어야 정상인데요. :shock:
tstring을 사용했을 경우에는 전혀 문제가 없습니다. 두 가지 사실을
tstring을 사용했을 경우에는 전혀 문제가 없습니다. 두 가지 사실을 말씀드리면
1. struct와 class가 다른 점은 디폴트 접근 권한과 상속 유형이 각각 public, private이라는 점뿐입니다.
2. 복사생성자, 대입연산자, 소멸자는 따로 정의하지 않으면 컴파일러가 자동으로 만들어 줍니다.
(이들을 The Big Three라고 부르기도 합니다.) 이때 멤버가 클래스 형이면(지금의 DATA::str 같은)
해당 클래스의 복사생성자, 대입연산자, 소멸자를 호출하여 생성, 대입, 소멸을 수행합니다.
d2 = d1은 (자동적으로 만들어진) DATA::operator=()을 호출하고 그 안에서
다시 tstring::operator=()을 호출하지요. 결국 모든 것이 잘 된다는 뜻이죠. :)
C처럼 memcpy로 복사하지는 않으며 그래서도 안되겠죠.
CString은 저도 잘 안써봐서 모르겠는데 실행 오류가 발생한다면 아마 The Big Three 중에
문제가 있을 것 같습니다.
아참, 그리고 std::string은 소멸자가 가상이 아니므로 tstring을 다형적으로
사용하시면 안됩니다.
댓글 달기