Java에서는 다음과 같이 Singleton을 만들 수 있습니다 (예외로 throw되지 않는 한).
private static Singleton m_this = new Singleton();
이것은 본질적으로 스레드로부터 안전하기 때문에 매우 편리합니다.
C ++에서 비슷한 작업을 할 수 있습니까?
스레드로부터 안전한 초기화로 싱글 톤을 만드는 한 가지 방법은 C ++ 11 기준으로 표준에 의해 보장됩니다. is :
class SomeSingleton {
public:
static SomeSingleton& instance() {
static SomeSingleton instance_;
return instance_;
}
private:
SomeSingleton() {
...
}
};
로컬 정적 변수 초기화는 C ++ 11에서 스레드로부터 안전 하기 때문에 스레드로부터 안전 합니다. 관련 표준 문서 N3485 는 섹션 6.7.4에 다음과 같이 말합니다.
이러한 변수는 처음 제어가 선언을 통과 할 때 초기화됩니다. 이러한 변수는 초기화 완료시 초기화 된 것으로 간주됩니다. [...] 변수가 초기화되는 동안 제어가 선언에 동시에 입력되면 동시 실행은 초기화 완료를 기다려야합니다.
각주 포함 :
구현시 이니셜 라이저 실행에 교착 상태가 발생하지 않아야합니다.
CRTP를 사용하여 멋진 템플릿 기본 클래스로 추상화 할 수 있습니다.
//Singleton template definition
template <typename TDerived>
class Singleton {
static_assert(is_base_of<Singleton, TDerived>::value, "Singleton: unexpected Derived template parameter");
public:
static TDerived& instance() {
static TDerived instance_;
return instance_;
}
protected:
Singleton() {
}
};
// SomeSingleton definition, using the Singleton template
class SomeSingleton : public Singleton<SomeSingleton> {
...
};
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다