항목 5: C++가 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자
항목 5: 클래스 기본 제공함수들
C++ 컴파일러는 클래스에 총 네가지의 기본 함수를 만들어 놓을 수 있다.
- 기본 생성자 // A();
- 기본 소멸자 // ~A(); 단 부모의 가상성을 따라 만들어짐.
- 기본 복사 생성자 // A(const A& a);
- 복사 대입 연산자 // A& operator=(const A& a);
각각은 생성되는 조건이 만족될때 만들어지게 된다.
먼저 1, 2는 클래스에 생성자나 소멸자가 하나도 없는 경우에 자동 생성된다.
3, 4는 미리 존재하는 해당 함수가 없는데 코드 상에서 그러한 함수를 호출하는 부분이 있다면 자동 생성된다.
기본 소멸자
컴파일러가 만드는 기본 소멸자에서 주의할 특성은 한가지이다.
소멸자의 가상성 즉, virtual의 여부는 부모 클래스를 따라간다는 것이다.
이는 항목7에서 다시 다룬다.
기본 복사 생성자
기본 복사 생성자가 하는 일은 각 멤버에 대한 복사 생성자를 호출해주는 것이다.
그때 멤버가 Primitive인 경우에는 비트 복사가 일어나게 된다.
단, 만일 이러한 자동 생성의 경우가 적법하지 않거나 이치에 맞지 않으면 컴파일 에러를 만든다.
그러한 경우는 다음과 같다.
template<class T>
class A
{
public:
A( std::string& str, const T& t);
...
private:
std::string& m_str;
const T m_t;
}
C++의 참조자는 반드시 자신이 가리키고 있는 것 이외의 것을 가리킬 수 없고,
또한 Const로 선언한 변수에 대하여 변경할 수가 없다.
따라서 위와 같이 참조자나 상수에 대한 경우에 컴파일러는 컴파일 에러로 답한다.
History
Last edited on 04/19/2007 17:56 by 로이쿤
Comments (0)