2015-01-19 2 views
1

클래스의 정적 로컬 변수 및 정적 멤버에 대해 몇 가지 질문이있었습니다. 일이 개의 의견과 아마도 가장 분명한에서 하나 link플러그인의 정적 로컬 변수 파기

C++ 프라이머는 말한다 다음 처음 실행이 객체의 정의를 통해 전달하기 전에

각 지역 정적 변수가 초기화됩니다. 로컬 기능이 종료되면 statics가 파괴되지 않습니다. 프로그램이 종료 될 때 이 파괴됩니다.

그러나 위의 설명은 "프로그램 종료 시점"이 모호하다는 것을 알았습니다. 애플리케이션 종료를 의미합니까? 또는 그것이 플러그인 인 경우, 플러그인이 언로드되었음을 의미합니까?

이전에 Linux에서 릴리스 모드로 컴파일 할 때 내 플러그인에서 로컬 정적 변수가 삭제되지 않은 것으로 나타났습니다. 하지만 클래스 멤버로 변경하면 플러그인을 언로드 할 때 제대로 파괴됩니다. 클래스/로컬 정적 변수는 플러그인에서만 사용됩니다.

아무 설명 할 수 있습니까?

+0

[C++에서 글로벌 및 클래스 정적 변수에 대한 소멸자를 호출합니까?] (http://stackoverflow.com/questions/2204608/does-c-call-destructors-for-global-and-class-static- 변수) – IdeaHat

+0

여기 질문에 대한 답변을 생각하지 않습니다. 여기에 나는 플러그인에서 코드를 요구하고있다. 플러그인에 대한 프로그램의 시작과 끝, 내 이해는 플러그인을 응용 프로그램에로드 할 때 시작됩니다. 프로그램의 끝은 프로그램에서 플러그인을 언로드 할 때입니다 (응용 프로그램 자체의 끝이 아님). 그렇다면 플러그인을 언로드 할 때 로컬 정적 변수가 파괴되어야한다고 생각하지만 어떻게 든 다른 동작을 감지했습니다. 나는 이것이 컴파일러/시스템의 버그인지, 아니면 내가 할당 한 문장의 모호성 또는 심지어 표준의 모호성 인지도 모른다. – user1073719

답변

0

정적 저장소 영역은 플러그인이 아니라 구현에 의해 관리됩니다.

일반적인 함수이고 플러그인이 아닌 경우이 함수는 여러 번 호출 될 수 있으므로 정적 객체의 데이터를 이전에 호출 된 것과 같은 시간에 찾을 수 있습니다.

올바른 동작은 플러그인을 언로드하고 다시로드 할 수있는 경우 로컬 정적 변수가 값을 유지하므로 구현이 종료 될 때까지는 파기 될 수 없다는 것입니다.