Accelerated C++에서 발췌 (페이지 315~316)
일단, 이러한 연산들을 정의했다면, 컴파일러는 각 타입의 객체가 생성되고, 복사되고, 대입되고, 소멸될 때마다 그것들을 사용하게 된다.
객체는 암묵적으로 생성되고, 복사되고, 소멸될 수 있다는 것을 명심해야 한다.
묵시적으로든 명시적으로든, 컴파일러는 적합한 연산을 호출할 것이다.
복사 생성자, 소멸자 및 대입 연산자는 밀접하게 연관되어 있기 때문에, 그들 간의 관계는 세 법칙(rule of three)이라고 알려져 있다.
만약 여러분의 클래스에 소멸자가 필요하다면, 아마 복사 생성자와 대입 연산자도 필요할 것이다.
클래스 T의 객체에 대한 모든 복사본이 제대로 처리되도록 하려면, 다음과 같은 것들이 필요하다.
T::T() //하나 또는 그 이상의 생성자, 인자를 가질 수도 있음.
T::~T() //소멸자
T::T(const T&) //복사생성자
T::operator=(const T&) //대입연산자
일단, 이러한 연산들을 정의했다면, 컴파일러는 각 타입의 객체가 생성되고, 복사되고, 대입되고, 소멸될 때마다 그것들을 사용하게 된다.
객체는 암묵적으로 생성되고, 복사되고, 소멸될 수 있다는 것을 명심해야 한다.
묵시적으로든 명시적으로든, 컴파일러는 적합한 연산을 호출할 것이다.
복사 생성자, 소멸자 및 대입 연산자는 밀접하게 연관되어 있기 때문에, 그들 간의 관계는 세 법칙(rule of three)이라고 알려져 있다.
만약 여러분의 클래스에 소멸자가 필요하다면, 아마 복사 생성자와 대입 연산자도 필요할 것이다.
예)
T::T(const T& rhs)
{
... ///< do something
}
T& T::operator=(const T& rhs)
{
if(this != &rhs)
{
... ///< do something
}
return *this;
}
댓글
댓글 쓰기