2013-03-04 1 views
0

Hello Stack Overflow.왜 Singleton은 글로벌 객체보다 나은 선택입니까

나는 CS 시험을 위해 공부하고 있는데, 내일은 우리 교수가 우리에게 제공 한 리뷰 시트를 살펴보고있다. 하나의 요점은 왜 Singleton이 Global보다 더 나은 선택인지를 아는 것입니다.

저는 추론은 확실하지 않지만, "네임 스페이스 오염"을 덜 사용하는 싱글 톤에 관해 뭔가를 말한 것을 기억합니다. 나는 싱글 톤과 글로벌을 비교하는 몇몇 구글 검색을 만들었지 만, 거의 모든 결과가 두 가지 모두 가난한 옵션이라고 말했다. 그래서 그것은 더 이상 나를 혼란스럽게 만들었습니다.

누구든지이 문제를 해결할 수 있다면 큰 도움이 될 것입니다. 감사!

+4

우욱, 싱글. – chris

+3

싱글 톤 *은 글로벌 객체입니다. 왜 메소드가 멤버 함수보다 더 나은 선택인지 묻는 것과 같습니다. – Pubby

+1

글쎄, [static order initialization fiasco] (http://www.parashift.com/c++-faq/static-init-order.html)가 다운되었지만 위대한 것은 아닙니다. –

답변

1

그들은 건설 게으른 :

LargeObject global;     // Large object is always constructed. 

class LargeObject_Singelton 
{ 
    public: static LargeObject& getInstance() 
    { 
     static LargeObject instance;  // This object is not created until the first 
     return instance;     // time getInstance() is called. 
    }          // If you never use it this can be important. 
}; 
+2

흠. 좀 더 깊이 설명해 주시겠습니까? – ModdedLife

+1

게으른 생성 가능. 인스턴스에 대한 첫 번째 호출을 잠그기 위해 다른 전역 객체가 필요하기 때문에 하나 이상의 스레드가 액세스하는 경우 지연 생성은 실제로 문제가됩니다. –

+0

@ john.pavan : C++ 11 및 C++ 03에서는 사실이 아닙니다. gcc는 문제가 아닙니다. DevStuio의 C++ 03에서는 주요한 문제는 아니지만 작동합니다. http://stackoverflow.com/a/449823/14065 –

관련 문제