싱글 톤의 정적 인스턴스를 만드는 이러한 방법의 차이점은 무엇입니까?
문제
최근에 라이브러리가 디버그 빌드 대신 릴리스 빌드로 제작되었을 때만 나타난 버그가 있습니다. 라이브러리는 COM 래퍼가있는 .NET DLL이며 CocreateInstance를 사용하여 관리되지 않는 C ++ 앱에서 DLL에서 클래스를 생성하고 있습니다. 마침내 버그를 추적했을 때 싱글 톤 객체에 액세스하여 발생했습니다. 싱글 톤 인스턴스가 그렇게 선언했습니다.
private static readonly MyObjectType s_instance = new MyObjectType;
그런 다음 다음과 같이 액세스했습니다.
public static MyObjectType Instance
{
get
{
return s_instance;
}
}
이것은 실패했다. 변경 :
private static MyObjectType s_instance;
public static MyObjectType Instance
{
get
{
if (s_instance==null)
{
s_instance = new MyObjectType();
}
return s_instance;
}
}
문제를 수정했습니다. 초기 사용법이 작동하지 않는 이유와 어느 쪽이든 수행 할 수있는 단점이있는 아이디어가 있습니까?
릴리스 DLL은 다른 관리 앱에서 완벽하게 사용할 수있는 것으로 보입니다.
다른 팁
Marc Gravell이 말한 것을 반복하지만 소리가납니다. 많이 이전 필드 니트 문제와 마찬가지로 빈 정적 생성자가 솔루션임을 의미합니다. 확실한 답변을 얻으려면 수업에 모든 생성자를 게시해야합니다.
두 번째 방법은 게으른 하중의 장점이 있습니다 (여기서는 이점이 있습니다).
제휴하지 않습니다 StackOverflow