프로그래밍/Effective c++

5. C++가 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자

CuriousBear 2016. 3. 10. 13:49
선언하지 않아도 컴파일러가 자동으로 만들어주는 함수가 있다.
바로 복사 생성자(copy constructor), 복사 대입 연산자(copy assignment operator), 그리고 소멸자(destructor)이다.
이때 만들어주는 형태는 모두 기본형이며 public멤버이고 inline함수이다.

기본 생성 자와 소멸자의 역할
  • 컴파일러에게 "배후의 코드"를 깔 수 있는 자리를 마련.
  • 기본 클래스 및 비정적 데이터의 생성자와 소멸자를 호출하는 코드를 생성
  • 이때 소멸자는 이 클래가 상속한 기본 클래스의 소멸자가 가상 소멸자로 되어 있지 않으면 역시 비가상 소멸자로 만들어진다.

기본 복사생성자와 복사 대입 연산자의 역할
원본 객체의 비정적 데이터의 사본을 객체 쪽으로 그냥 복사. 
따라서 비정적 멤버변수가 참조자 또는 const인 경우 복사생성자와 대입연산자를 자동생성하는 것을 컴파일러가 거부하므로, 따로 직접 정의해주어야한다.

private로 복사생성자를 만들면 파생클래스는 복사 대입 연산자를 가질수 없다.