일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Effective c++
- 예외
- 오블완
- 티스토리챌린지
- reference
- 메타테이블
- 반복자
- 비교 함수 객체
- 암시적 변환
- 영화 리뷰
- lua
- 게임
- virtual function
- more effective c++
- 언리얼
- UE4
- 다형성
- 참조자
- 스마트 포인터
- Vector
- Smart Pointer
- implicit conversion
- exception
- effective stl
- c++
- 영화
- resource management class
- operator new
- 루아
- 상속
- Today
- Total
목록다형성 (3)
스토리텔링 개발자
항목 24. 가상 함수, 다중 상속, 가상 기본 클래스, RTTI에 들어가는 비용을 제대로 파악하자 가상 함수C++ 언어는 어떻게 구현되었느냐에 따라 객체의 크기와 멤버 함수의 속도가 현저히 변한다.그 중 가장 큰 영향을 끼친다고 볼 수 있는 것이 바로 가상 함수이다.가상 함수는 가상 테이블(vtbl, virtual table) 및 가상 테이블 포인터(vptr, virtual table pointer)로 구현한다.그리고 이 두 가지가 성능에 가장 큰 쟁점이 된다. 가상 테이블(vtbl, virtual table)가상 함수를 포함하는 클래스가 가지는 함수 포인터의 배열을 말한다.가상 함수를 선언 혹은 상속받은 클래스(클래스 인스턴스가 아님!)에 반드시 생긴다.가상 테이블은 해당 클래스의 가상 함수 함..
항목 3 : 배열과 다형성은 같은 수준으로 놓고 볼 것이 아니다. 상속성이 주는 혜택기본 클래스 객체의 포인터나 참조자를 통해 파생 클래스 객체를 조작할 수 있다.즉, 다형성을 가지고 있다.파생 클래스 객체의 배열을 기본 클래스 포인터나 참조자를 통해 조작할 수 있다.하지만, 이게 정말 바랬던 일일까..? 기본 클래스 배열 대신 파생 클래스 배열을 사용하는 경우class BST { ... };class BalancedBST : public BST { ... };void printBSTArray(ostream& s, const BST array[], int numElements){ for(int i = 0 ; i 두 번째 printBSTArray는 미정의 결과이다. 배열과 포인터array[..
항목 7. 다형성을 가진 기본클래스에서는 소멸자를 반드시 가상 소멸자로 선언하자. 기본 클래스의 소멸자가 비가상 소멸자라면기본 클래스 포인터에 할당된 파생 클래스 객체가 삭제될 때의 프로그램 동작이 미정의 사항(C++ 규정으로 정해져 있지 않다) 이다.그러므로 가상 함수를 하나라도 가진 클래스는 가상 소멸자를 가지는 것이 대부분 올바른 선택이다. 기본 클래스로 의도하지 않은 클래스에 가상 소멸자를 선언하는 건 좋지 않다.객체의 크기가 커진다.가상 함수를 하나라도 가지는 클래스는 가상 테이블(vtbl)의 시작 주소(vptr)를 가지게 되기 때문이다.다른 언어로 선언된 동일한 자료구조와의 호환성이 없어진다.다른 언어에서는 vptr을 만들 수 없기 때문이다. 추상 클래스로 만들고 싶지만 마땅히 만들..