Gems 1권 (1)

GEMS 2016. 1. 14. 18:11

생성자는 리턴값이 없으므로 안에 Create()같은 함수를 이용해서 값을 반환하도록 한다.

Bool값을 반환해서 할 수도 있지만 예외처리 매커니즘으로 할 수도 있다.

하지만 예외처리는 속도상 부담이 될 수 있다.


소멸자는 Destroy()를 호출하여 자원 패제나 객체 소멸, 재생성 할 수 있게 한다.

하지만 Create()와 쌍을 이루지 않고 호출되어도 문제가 생기지 않도록하며 마지막에 Clear()함수를 호출하게 한다.


싱글턴을 사용하는이유

모든 소스파일에서 extern문으로 전역객체를 선언하는 것 보다는 하나의 함수를 통해서 객체에 접근하는 것이 훨씬 편하고 각체의 생성 초기화 시점을 더 정밀하게 제어할 수 있다.

객체 포인터를 사용한다면 객체에 대한 모든 접근들을 제어할 수 있게 된다.


퍼사드 패턴

'관리자는 클래스들 사이의 상호희존성을 최소화 시키는데 필주적이다. (매니저 클래스 개념)

구현 원칙은 "가능한한 서브시스템 내부의 클래스들을 시스템 외부로 노출시키지 말라"


스테이트 패턴(상태 패턴) FSM을 생각하면 되겠다.


팩토리 패턴


템플릿 인자에서 부동수수점 수에 대한 지원 문제.

C++표준에는 "형이 없는 종류의 템플릿 인자는 부동소수점...형을 가지도록 선언될 수 없다."

이에 대한 해결책은

template< double& R> struct Sine

처럼 참조 인자를 사용하는 것이다.



템플릿을 메타프로그래밍을 한다고 해서 무조건 빠른것은 아니다.

효과가 검증되기 전까지는 의심해봐야 한다.


책에 있는 코드중

int offset = (int)T*1 - (int)(Singleton)<T>*)(T*)1;

이 부분은 주소값의 거리를 계산해서 지금 만들어지는 싱글톤이 단일 객체인지 확인하는 과정

이다.


(템플릿 메타 프로그래밍 코드는 나중에 분석하도록 하자)











'GEMS' 카테고리의 다른 글

GEMS 2권 (1)  (0) 2016.01.21
GEMS 1권(4)  (0) 2016.01.20
GEMS 1권 (3)  (0) 2016.01.15
GEMS 1권(2) STL  (0) 2016.01.15
GEMS 1권 1.0 데이터 주도적 설계  (0) 2016.01.12
posted by 알쿠미