디폴트 대입 연산자의 문제점
Programming/C++ 2012. 9. 11. 03:14 |int main(void)
{
Point pos1(5, 5); //복사생성자의 대표적인 상황.
Point pos2 = pos1;
}
※ 중요한 사실은 새로 생성하는 객체 pos2의 초기회에 기존에 생성된 객체 pos1이 사용되었다는 점이다.
int main(void)
{
Point pos1(5, 5); //대입 연산자의 대표적인 상황.
Point pos2(3, 3);
pos2 = pos1;
}
※ 중요한 사실은 pos2도, 그리고 pos1도 이미 생성 및 초기화가 진행된 객체라는 사실이다.
디폴트 대입 연산자의 문제..
called destructor! 이것이 딱 한번만 출력되었다는 것을 보아 소멸자의 호출과정에서 문제가 발생했음을 알 수 있다.
37행: man2가 가리키고 있던 주소 값을 읽게 되므로, 더 이상 문자열에 접근이 불가능하다.
때문에 소멸도 불가능한 상태가 되어 메모리의 누수로 이어지게 된다.
# 정리하면, 생성자 내에서 동적 할당을 하는 경우, 디폴트 대입 연산자는 두 가지 문제를 일으키므로 다음의 형태로 직접 대입 연산자를 정의해야 한다.
1. 깊은 복사를 진행하도록 정의한다.
2. 메모리 누수가 발생하지 않도록, 깊은 복사에 앞서 메모리 해제의 과정을 거친다.
'Programming > C++' 카테고리의 다른 글
이니셜라이저의 성능 향상에 대하여 (0) | 2012.09.20 |
---|---|
상속 구조에서의 대입 연산자 호출 (0) | 2012.09.13 |
대입 연산자의 오버로딩2 (0) | 2012.09.10 |
cout, cin 그리고 endl의 정체 (0) | 2012.08.30 |
교환법칙 문제의 해결 (0) | 2012.08.28 |