Chapter 2 생성자, 소멸자 및 대입 연산자


* 생성자를 정의해주었다면 기본 생성자를 만들어내지는 않음


* 참조자를 데이터 멤버로 갖고있는 클래스에 대입 연산을 지원하려면 직접 복사 대입 연산자를 정의해 주어야 함.


* 복사 대입 연산자를 private으로 선언한 클래스를 상속한 클래스의 경우, 암시적인 복사대입 연산자를 가질 수 없음.


* 위의 특성을 이용하여 복사 생성자와 복사 대입 연산자를 private에 선언 후 정의를 해버리지 않으면 복사 생성자와 복사 대입 연산자의 사용을 막을 수 있음.


* 링크 시점 에러를 컴파일 시점 에러로 옮길 수도 있음.


* 다형성을 가진 기본클래스에서는 소멸자를 반드시 virtual로 선언할 것. 그렇지 않으면 기본객체 포인터로 객체 삭제를 시도했을 시 기본객체의 소멸자만 호출되어서 자식객체는 삭제되지 않고 메모리 누수가 발생된다. (기본클래스에만 써주면 됨)


* virtual 소멸자를 선언하는 것은 해당 클래스에 가상함수가 하나라도 들어 있는 경우로 한정해야 함. 가상함수가 포함되면 객체의 크기가 커진다.


* 가상 소멸자가 없는 클래스는 STL 컨테이너 타입들이다. 그러니 컨테이너 타입들을 상속받아서 사용하지 말자.


* 소멸자에서 절대 예외가 빠져나가지 않도록 try-catch를 이용하자.


* 예외에 대해 사용자가 반응해야 할 필요가 있다면 반드시 보통의 함수에서 처리하는것이 좋다.


* 파생클래스의 기본클래스가 생성되는 도중의 해당 객체 타입은 기본클래스이다.


* 객체 생성 및 소멸과정에서 절대로 가상함수를 호출하지 말자.


* 미초기화된 데이터 멤버는 정의되지 않은 상태에 있다. 이때문에 객체의 생성 및 소멸시에 가상함수가 파생클래스로 내려가지 않는 것이다.


* 대입 연산자는 *this의 참조자를 반환하도록 한다.


* operator= 에서 자기대입에 대한 처리를 반드시 한다.


* 객체의 복사는 모든 부분을 빠짐없이 복사해야한다. 얕은 복사와 깊은 복사에 대한 문제도 고려해야한다.


+ Recent posts