는 C++ 11에서 싱글 구현하는 스레드 안전한 방법입니다 다음 알고 I : 또한 스레드 -스레드 안전 싱글은 C++ 11
Foo* getInst()
{
static Foo* inst = new Foo(...);
return inst;
}
내가 다음 this answer 읽을입니다 안전 :
Foo& getInst()
{
static Foo inst(...);
return inst;
}
정말 스레드로부터 안전합니까?
Foo
의 인스턴스가 단일 스택 프레임에 할당되는 것이 문제가되지 않습니까?
은 힙에 할당되지 않습니까?
스레드로부터 안전 할 경우 다른 것을 선호하는 이유가 무엇입니까?
* 두 변수 모두 정적이므로 동일한 수명 시맨틱을 의미하므로 두 번째 변수가 안전하지 않으면 첫 번째 변수도 안전하지 않습니다. – cdhowie
정적 초기화는 C++ 11에서 스레드로부터 안전하다는 점에 유의하십시오. 이전 버전의 표준에서는 이러한 보증을하지 않습니다. 또한, MSVC2012 및 2013에서 정적 초기화에는 버그가 포함되어 있으며 실제로는 스레드로부터 안전하지 않습니다. 크로스 플랫폼 코드의 경우 마술 정체를 사용하지 않기위한 조언이 필요합니다. – Stefan