RTTI
- dynamic cast, typeid
- 지양해야함
- 런타임에 타입 검사하기 때문
CRTP
로버트마틴 solid
디미터 원칙
RVO, NRVO
- Return Value Optimization
1
2
3
4
//RVO
Val create_val_RVO(int num) {
return val(num);
}
- Named Return Value Optimization
1
2
3
4
5
//NRVO
Val create_val_NRVO(int num) {
Val val(num);
return val;
}
- 디버그 모드 실행시, RVO는 복사생성자가 호출되지 않음, NRVO는 복사생성자 호출
- 릴리즈 모드 실행시, NRVO도 복사생성자 호출되지 않음
이는 컴파일러가 최적화했기 때문
- std::move 리턴하는 것 조심해야함
1
2
3
4
5
T fn()
{
T t;
return std::move (t);
}
- 위와 같은 코드는, 최적화되지 않아 복사생성자가 호출된다고함.
EBO
공백 기본 클래스 최적화 (Empty Base Optimization)
공백 클래스: 개념적으로 차지하는 메모리 공간이 없어야함
- non-static 멤버가 없음 (static 멤버를 가질 수 있음)
- virtual 함수가 없음 (non-virtual 멤버 함수를 가질 수 있음)
- virtual base 클래스가 없음 (typedef나 enum 등을 가질 수 있음)
하지만, C++ 독립 구조 객체는 반드시 크기가 0을 넘어야한다는 제약 (char 끼워넣어 0을 넘김)
만약, 상속에 사용한다면 이러한 제약을 최적화해줌 (크기가 0)
참고
RTTI and CRTP
RVO, NRVO
EBO