고유 ID를 할당 할 수있는 리소스 관리자를 쓰고 있습니다 (예 : OpenGL 유니폼 버퍼 바인딩 포인트에 대해 사용 된 리소스를 추적 할 필요가 없음). 매니저의 인스턴스가 많을수록 각 ID가 이미 사용되었음을 알아야하기 때문에 문제가됩니다. 그래서 한 가지 방법은 사용하는 싱글 톤 :싱글 톤 대 정적 멤버
class ResourceManager
{
private:
HandleAllocator uniform_binding_points;
...
public:
static ResourceManager& Get()
{
static ResourceManager resource_manager;
return resource_manager;
}
unsigned int AllocateUniformBindingPoint()
{ ... }
...
private:
ResourceManager()
{ }
~ResourceManager()
{ }
}
또는 정적 멤버를 사용하는, 그래서 더 인스턴스가있을 수 있지만, 각 인스턴스는 동일한 상태 사용 :
이class ResourceManager
{
private:
static HandleAllocator uniform_binding_points;
...
public:
unsigned int AllocateUniformBindingPoint()
{ ... }
...
}
그래서 내 질문입니다 차이점은 무엇이며 더 나은 솔루션이 있다면 (테스트 가능성도 고려한)? 나는 많은 사람들이 싱글 톤을 싫어한다는 것을 알고 있지만 제 생각에는 유일한 차이점은 싱글 메소드 인스턴스 인 Get()을 더 많이 호출해야한다는 것입니다. 그러나 Get() 메소드를 한 번 호출하면 참조를 저장할 수 있습니다. 또한 나는 이것을 읽었습니다 : http://misko.hevery.com/2008/08/17/singletons-are-pathological-liars/ 그리고 구성 및 집계를 통해 똑같은 "의존성 숨김"을 달성 할 수 있다고 말할 필요가 있습니다. 따라서 이들도 사용하지 마십시오 ...
더 이상 단일 인스턴스는 없지만 더 많은 인스턴스가 필요하기 때문에 아키텍처를 리팩토링해야하는 경우 문제가 발생합니다. –