이 클래스에는 클래스와 초기화 메소드가있는 기존 코드가 있습니다. 일단 클래스의 객체가 생성되면 initialize를 호출해야합니다.
initialize 메소드가 존재하는 이유 전역 범위를 갖기 위해 오브젝트가 조기에 작성된 후 initialize 메소드가 종속 된 dll을로드 한 후 나중에 호출됩니다.
초기화 관련 문제 이제 클래스에는이 bool isInitialized가 있으며,이 bool isInitialized는 진행하기 전에 모든 메소드에서 확인해야하며 초기화되지 않은 경우 오류를 리턴합니다. 간단히 말해, 그것은 큰 고통입니다.
하나의 가능한 솔루션 생성자에서 초기화하십시오. 전역 범위의 개체에 대한 포인터 만 있습니다. dll이로드 된 후 실제 객체를 만듭니다.
위 솔루션의 문제이 클래스의 객체를 만드는 사람은 dll이로드 된 후에 만 생성해야하며 그렇지 않으면 실패 할 것입니다.
이것이 허용됩니까?
call_once
C ++ 11을 . 아직 C ++ 11에 포함되지 않은 프로젝트는 C ++ 11에서 call_once가 어떻게 구현되는지 연구하고 (어떻게 해결하고 어떤 문제에 초점을 맞추는 지), C ++의 (맛있는) 풍미로 다시 구현해야합니다. 상태를 정적으로 초기화해야하는 멀티 스레드 안전 동기화 프리미티브가 필요합니다 (상수 값으로). C ++ 11 이전의 컴파일러에는 만족해야 할 다른 특성이있을 수 있습니다.