2014-09-09 1 views
-1

아래 코드에서 클래스 이름과 객체 이름을 동일하게하여 singleton (즉 단일 객체 클래스)의 목적을 달성하려고합니다.클래스 이름과 객체 이름을 동일하게 만들 수 있습니까?

singleton 클래스의 목적을 달성하기 위해 아래 코드에 결함이 있습니까?

#include <iostream> 
using namespace std; 

class singleton 
{ 
    private : 
     int val; 

    public : 
     void set(int a) 
     { 
      val=a; 
     } 

     int display() 
     { 
      return val; 
     } 
} singleton; 


int main() 
{ 
    singleton.set(5); 
    cout << "output a = " <<singleton.display()<< endl; 
    //singleton obj;//second object will not be allowed 
    return 0; 
} 
+0

정적 초기화 실패. 물론 싱글 톤 패턴 자체에 관련된 모든 이슈들. –

+0

그것은 약간 혼란스러운 이름을 가진 단지 전역 변수입니다. 그 자체로는 나쁜 생각이지만, 싱글 톤 반 패턴은 클래스의 단일 인스턴스를 강제 적용합니다. 이것은 더 나쁜 아이디어입니다. 코드를 유지 관리하는 사람들의 삶을 어렵게 만들고 싶다면 더 열심히 노력해야합니다. –

+0

나는 내가 준비없이 엉망이라고 생각한다. – MoBaShiR

답변

3

유형은 임의의 수만큼 만들 수 있으므로 단일 유형이 아닙니다. 예 :

auto cpy = singleton; 
cpy.set(42); 
assert(singleton.display() != cpy.display()); 

// let's make loads of copies! 
std::vector<decltype(singleton)> v(100, cpy); // 100 "singletons"! 

걱정하지 않으셔도됩니다.

관련 문제