일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 함수 객체
- exception
- 스마트 포인터
- 반복자
- 상속
- 참조자
- 비교 함수 객체
- 예외
- effective stl
- implicit conversion
- 언리얼
- 영화 리뷰
- Effective c++
- 티스토리챌린지
- lua
- 게임
- virtual function
- resource management class
- c++
- reference
- UE4
- more effective c++
- 영화
- 루아
- 다형성
- Smart Pointer
- operator new
- 암시적 변환
- 메타테이블
- 오블완
Archives
- Today
- Total
스토리텔링 개발자
[Effective C++] 5. 암시적으로 생성되는 함수 본문
728x90
항목 5. C++가 은근슬쩍 만들어 호출해버리는 함수들에 촉각을 세우자.
암시적 생성
- 생성자, 복사 생성자, 복사 대입 연산자, 소멸자
- 직접 선언하지 않으면 컴파일러가 저절로 선언해준다.
- 암시적 생성 되는 복사 관련 함수들은 얕은 복사를 한다.
암시적으로 생성된 함수들의 특징
- 기본 생성, 소멸자
- 기본 클래스 및 비정적 데이터 멤버의 생성자, 소멸자를 호출해주는 등의 작업을 한다.
- 즉, 컴파일러에게 “배후의 코드”를 깔 수 있는 자리를 마련해준다.
- 상속한 기본 클래스의 소멸자가 가상 소멸자가 아니라면 비가상 소멸자로 만들어진다.
- 복사 생성자, 복사 대입 연산자
- 원본 객체의 비정적 데이터를 사본 객체 쪽으로 그냥 복사한다.
- 복사 생성자와 복사 대입 연산자는 근본적으로 동작 원리가 같다.
- 복사 대입 연산자를 private로 선언한 기본 클래스의 파생 클래스는 암시적 복사 대입 연산자를 가질 수 없다.
복사 대입 연산자가 생성되려면?
- 컴파일러가 자동으로 만들어주는 최종 결과 코드가 적법하고, 이치에 닿아야 한다.
- 둘 중 어느 검사도 통과하지 못하면 컴파일러는 operator=의 자동 생성을 거부한다.
class Test{
private:
int i = 1;
int& i2 = i;
const i3 = 3;
};
int main() {
Test t;
Test t2;
t = t2; // i2, i3로 인해 실패
// 클래스 내 비정적 상수 혹은 참조자를 포함하는 객체에 대해
// 복사 대입 연산자를 암시적으로 사용하려고 할 때,
// 해당 값들은 수정할 수 없으므로 컴파일이 거부된다.
return 0;
}
728x90
'개발 > Effective C++' 카테고리의 다른 글
[Effective C++] 7. 다형성 부모 클래스라면 가상 소멸자 선언 (0) | 2024.05.21 |
---|---|
[Effective C++] 6. 암시적으로 생성되는 함수 금지하기 (0) | 2024.05.20 |
[Effective C++] 4. 객체 초기화 문제 (0) | 2024.05.16 |
[Effective C++] 3. const 선호하기 (0) | 2024.05.14 |
[Effective C++] 2. #define 없애기 (0) | 2024.05.14 |
Comments