암시적 멤버 메서드
암시적 멤버 메서드
- 기본 생성자
- 기본 소멸자
- 복사 생성자
- 대입 연산자
- 이동 생성자
- 이동 대입 연산자
기본 생성자
- 매개변수가 없는 생성자이다
- 클래스에 다른 생성자가 없을 경우 컴파일러가 자동으로 생성한다
- 객체 멤버와 외부 환경을 초기화하는 역할을 한다
기본 소멸자
- 클래스 이름 앞에 ~를 붙여 표시한다
- 객체의 수명이 끝날 때 컴파일러에 의해 자동으로 호출된다
- 사용이 끝난 객체를 정리하는 역할을 한다
복사 생성자
- 같은 클래스 타입의 다른 객체를 참조로 받아 자신을 초기화한다
- 깊은 복사(deep copy)를 통해 완전한 독립성을 가진 객체를 생성한다
- 함수에 객체를 전달하거나 반환할 때, 또는 객체로 초기화할 때 호출된다
대입 연산자
- 자신과 같은 타입의 다른 객체를 대입받을 때 사용하는 연산자이다
- 기본적으로 얕은 복사(shallow copy)로 수행된다
이동 생성자
- Rvalue 참조를 파라미터로 받는 생성자이다
- 얕은 복사 후 원본의 소유권을 이전하고 원본을 NULL로 초기화한다
- 임시 객체를 전달하거나 std::move()를 사용할 때 호출된다
이동 대입 연산자
- Rvalue 참조로부터 리소스 소유권을 이전받는다
- 복사 대신 리소스를 이동시켜 성능을 향상시킨다
- 이동 후 원본 객체는 유효하지만 비어있는 상태가 된다
예시
class MyClass {
public:
// 기본 생성자
MyClass() {
// 멤버 초기화
}
// 기본 소멸자
~MyClass() {
// 리소스 정리
}
// 복사 생성자
MyClass(const MyClass& other) {
// 깊은 복사 구현
}
// 대입 연산자
MyClass& operator=(const MyClass& other) {
if (this != &other) { // 자기 대입 검사
// 깊은 복사 구현
}
return *this;
}
// 이동 생성자
MyClass(MyClass&& other) noexcept {
// 리소스 이동
// other를 null 상태로 만듦
}
// 이동 대입 연산자
MyClass& operator=(MyClass&& other) noexcept {
if (this != &other) { // 자기 대입 검사
// 기존 리소스 정리
// 리소스 이동
// other를 null 상태로 만듦
}
return *this;
}
};