Sep 292009
 

목적은 Construct On First Use와 같다. 즉, global static object, global object 초기화 순서가 명확하지 않아서 발생하는 static initialization order fiasco를 막기 위한 idiom이다.

Construct On First Use는 local static object가 초기화되는 시점을 이용했던 반면, Nifty Counter는 다른 translation unit이면 링커가 정렬해주는 순서에 군말 없이 따라야 하지만 같은 translation unit이면 소스 코드 상에 먼저 나타난 놈이 먼저 초기화된다는 사실을 이용한다. 그리고 Construct On First Use와 달리 다른 global static object, global object를 초기화해주는 보조적인 역할을 한다.

Continue reading »

by-nc-sa

Sep 222009
 

global static object, global object 가 사용되기 전에 초기화되는 걸 보장하는 idiom이다.

같은 translation unit, 즉 같은 cpp 파일에선 보이는 순서에 따라 초기화되지만 이게 다른 translation unit이면 linker가 정렬하는 순서를 따른다. 그래설라무네 링커보고 그냥 알아서 잘 해주세요 하다가 초기화 순서가 잘못돼서 죽을 때가 있는데, 이런 현상을 static initialization order fiasco라고 한다. 덧붙여 MSVC에서 해제 순서는 스택을 사용하기 때문에 초기화 순서 반대이다.

Continue reading »

by-nc-sa

Apr 292009
 

컴파일할때 파일 간의 디펜던시를 줄이려고 사용하는 관용구(idiom)이다. public 접근 권한으로 정의된 함수가 변경될 때, 이 파일을 include 하는 녀석들이 다시 컴파일되는 건 당연한데, 다른 녀석들이 못 보는 private 접근 권한의 멤버 함수나 변수가 변경될 때도 같은 일이 일어나는 건 못 참겠다가 Pimpl의 배경이다. 컴파일 시간을 줄이려고 많이 사용하는 관용구. 여러 관용구 중에 가장 많이 사용하는 관용구가 아닐까 생각된다.

Continue reading »

by-nc-sa