클래스의 정적 로컬 변수 및 정적 멤버에 대해 몇 가지 질문이있었습니다. 일이 개의 의견과 아마도 가장 분명한에서 하나 link플러그인의 정적 로컬 변수 파기
C++ 프라이머는 말한다 다음 처음 실행이 객체의 정의를 통해 전달하기 전에
각 지역 정적 변수가 초기화됩니다. 로컬 기능이 종료되면 statics가 파괴되지 않습니다. 프로그램이 종료 될 때 이 파괴됩니다.
그러나 위의 설명은 "프로그램 종료 시점"이 모호하다는 것을 알았습니다. 애플리케이션 종료를 의미합니까? 또는 그것이 플러그인 인 경우, 플러그인이 언로드되었음을 의미합니까?
이전에 Linux에서 릴리스 모드로 컴파일 할 때 내 플러그인에서 로컬 정적 변수가 삭제되지 않은 것으로 나타났습니다. 하지만 클래스 멤버로 변경하면 플러그인을 언로드 할 때 제대로 파괴됩니다. 클래스/로컬 정적 변수는 플러그인에서만 사용됩니다.
아무 설명 할 수 있습니까?
[C++에서 글로벌 및 클래스 정적 변수에 대한 소멸자를 호출합니까?] (http://stackoverflow.com/questions/2204608/does-c-call-destructors-for-global-and-class-static- 변수) – IdeaHat
여기 질문에 대한 답변을 생각하지 않습니다. 여기에 나는 플러그인에서 코드를 요구하고있다. 플러그인에 대한 프로그램의 시작과 끝, 내 이해는 플러그인을 응용 프로그램에로드 할 때 시작됩니다. 프로그램의 끝은 프로그램에서 플러그인을 언로드 할 때입니다 (응용 프로그램 자체의 끝이 아님). 그렇다면 플러그인을 언로드 할 때 로컬 정적 변수가 파괴되어야한다고 생각하지만 어떻게 든 다른 동작을 감지했습니다. 나는 이것이 컴파일러/시스템의 버그인지, 아니면 내가 할당 한 문장의 모호성 또는 심지어 표준의 모호성 인지도 모른다. – user1073719