문제
곧 관련 글을 올리겠습니다. 내 블로그, 하지만 먼저 제가 놓친 것이 없는지 확인하고 싶습니다.
제가 놓친 예를 찾으시면 제 게시물에 인용하겠습니다.
주제는 싱글톤 구현 실패입니다.어떤 경우에 할 수 있나요? 우연히 싱글톤의 여러 인스턴스를 얻으시겠습니까?
지금까지 나는 다음을 생각해 냈습니다.
- 첫 번째 호출 시 경쟁 조건
instance()
- 여러 DLL 또는 DLL 및 실행 파일에 통합
- 싱글톤의 템플릿 정의 - 실제로는 별도의 클래스
내가 놓친 다른 방법은 없을까요? 아마도 상속 때문일까요?
해결책
cpp 파일에서 초기화하는 정적 인스턴스 필드를 사용하는 경우 일부 정적/전역의 초기화가 싱글톤의 인스턴스를 가져오려고 하면 여러 인스턴스(및 더 나쁜 동작)를 얻을 수 있습니다.이는 컴파일 단위 전체의 정적 초기화 순서가 정의되지 않았기 때문입니다.
다른 팁
ctor가 비공개인 한 상속은 문제가 되지 않습니다.
그러나 복사 생성자를 허용하지 않으면 사용자가 의도치 않게 싱글톤 인스턴스를 복사할 수 있습니다.비공개로 상속 부스트::복사 불가능 이를 방지하는 가장 쉬운 방법입니다.
제휴하지 않습니다 StackOverflow