1. 기본 생성자
2. 기본 소멸자
3. 복사 생성자
4. 복사 대입 연산자
5. 이동 생성자
6. 이동 대입 연산자
1. 기본 생성자
객체 생성 시 사용자가 초깃값을 명시하지 않았을 때, 컴파일러가 자동으로 제공하는 생성자.
특정 경우에 자동으로 삭제된다.
1. & 혹은 const 멤버변수가 있을 때
2. 기반 클래스의 기본 생성자가 삭제 됐을 때
3. 기반 클래스가 기본 소멸자가 삭제 됐을 때
4. 멤버 변수의 기본 생성자가 삭제 됐을 때
2. 기본 소멸자
객체의 수명이 끝나면 컴파일러에 의해 자동으로 호출되는 함수.
const, volatile, static 으로 선언되 수 없다.
생성자는 여러개 가질 수 있지만 소멸자는 하나만 가질 수 있다.
인자를 가지지 않는다.
특정 경우에 삭제된다.
1. static 이 아닌 멤버변수의 소멸자가 삭제 됐거나 private 나 protect 라서 접근 불가할 때
2. 부모 클래스의 소멸자가 삭제 됐거나 private 라서 접근 불가 할 때
3. 부모 클래스가 가상 소멸자를 가질 때
3. 복사 생성자
기본적으로 얕은 복사한다. Call-by-Value 방식이다.
객체를 인자로 받아, 멤버를 복사하는 생성자.
값 반환, 인자를 Call-by-Value로 전달 시, 변수 생성과 동시에 다른 변수의 값으로 초기화할 때 호출된다.
특정 경우에 삭제된다.
1. 기반 클래스가 복사 될 수 없을 때
2. 기반 클래스의 소멸자가 삭제 됐거나, 접근불가 일 때
사용자 정의 이동 생성자나 이동 대입 연산자가 있으면 암시적 생성 자체가 안된다.
rvalue 레퍼런스 멤버변수가 있으면 암시적 생성 안된다.
4. 복사 대입 연산자
사용자 정의 이동 생성자나 이동 대입 연산자가 있으면 암시적 생성 자체가 안된다.
생성시기가 아닌 일반 상황에서 대입 연산시 호출된다.
특정 경우에 삭제된다.
1. const 타입의 비정적 멤버변수가 있으면 제거된다.
2. 참조타입의 비정적 멤버변수가 있으면 제거된다.
3. 기반 클래스가 복사 대입 연산자가 호출 불가능하면 제거된다.
5. 이동 생성자
사용자 정의 복사 생성자, 복사 대입 연산자, 이동 대입 연산자, 소멸자가 있으면 암시적 생성이 되지 않는다,
생성자가 호출되는 시점에 기존 메모리를 새 객체가 가리키게 하여 깊은 복사를 막는다.
임시적으로 생성되는 임시 객체의 경우에 이동 생성자를 사용하면 메모리와 연산이 더 적게 든다.
특정 경우에 삭제된다.
1. 비정적 변수가 이동이 불가능할 때 (접근제한)
2. 부모 클래스가 이동 될 수 없을 때 (접근제한)
3. 부모 클래스의 소멸자가 삭제되었거나 접근불가 일 때
6. 이동 대입 연산자
사용자 정의 복사 생성자, 복사 대입 연산자, 이동 생성자, 소멸자가 있으면 암시적 생성이 되지 않는다
특정 경우에 삭제 된다.
1. const 타입의 비정적 변수가 있을 경우
2. 참조 비정적 변수가 있을 경우
3. 비정적 변수가 이동이 불가능할 때 (접근불가 혹은 이동 대입 연산자가 삭제되었을때)
4. 기반 클래스가 이동 불가 할 경우 (기반 클래스의 이동 대입 연산자가 삭제되거나 접근불가할 경우)
'Cpp' 카테고리의 다른 글
push_back, emplace_back (0) | 2024.04.02 |
---|---|
move (0) | 2024.04.02 |
템플릿(template) (0) | 2023.06.20 |
콜백 함수 (0) | 2023.06.19 |
허상 포인터(댕글링 포인터) (0) | 2023.06.19 |