C++ - C++03과 C++11 싱글톤 구현 차이
C++11에는 ‘C++11 - 블럭 범위를 가진 static 변수 초기화는 스레드 세이프 하다’ 라는 기능이 생겼다.
그래서 아래와 같이 쉽게 싱글톤 인스턴스 생성 가능하다.
template <typename T>
inline T& Singleton<T>::getInstance() {
static T inst;
return inst;
}
그러나 C++03 에서는 멀티스레드에서 호출될 수 있다면 아래와 같이 해야 한다.
template <typename T>
std::once_flag Singleton<T>::onceFlag;
template <typename T>
inline T& Singleton<T>::getInstance() {
std::call_once(onceFlag, [&] {
pInstance.reset(new T());
});
return *pInstance;
}
이 글은 2018-02-01에 작성되었습니다.