정적 CComPtr 멤버 변수를 응용 프로그램에 포함시키는 것은 좋지 않습니다. 우리는 정적 변수의 제어 파괴를 할 수 없으므로 CoUninitialze 후에 발생할 수 있습니다.정적 CComPtr 변수
답변
적절한 예방 조치를 취한 경우 CComPtr
을 정적 멤버로 사용하는 것이 본래 나쁘지는 않습니다. 나는 당신이 고려해야한다는 의미 "적절한 예방 조치"으로
:
- 에 대한 액세스 권한을 Mutexing;
- 초기화하기 전에 사용하기 전에 ;
- 사용자 자신의 클래스에 대해 상호 배제 된 정적 인스턴스 카운트 유지.
- 인스턴스 카운트가 0에 도달하면 클래스가 자신의
FinalRelease
메서드에서 호출되는지 확인합니다. 세르게이는 자신의 의견에, 나는 그것이 나쁜 생각 말했듯이
는 어쨌든
나쁜 생각이다. 정적 객체의 소멸자는 C++ 03 표준의 3.6.3 절에서 설명 된대로 메인 종료 후에 호출됩니다.
정적 저장 기간의 초기화 된 객체에 대한 소멸자 (블록 범위 또는 네임 스페이스 scope)는 main에서 돌아와 exit (18.3)를 호출 한 결과 호출됩니다. 이러한 객체는 생성자 완료 또는 동적 초기화 완료의 역순으로 파괴됩니다. 객체가 정적으로 초기화되면 객체가 동적으로 초기화 된 것과 같은 순서로 객체가 파괴됩니다. 배열 또는 클래스 형의 객체의 경우, 그 객체의 모든 하위 객체는 파괴되고, 그 하위 객체의 구축 중에 정적 저장 기간이 초기화 된 임의의 로컬 객체는 파기됩니다.
여기에서 데모 된대로 : http://www.geeksforgeeks.org/static-objects-destroyed/.
메인이 끝나기 전에 주 스레드에서 COM 라이브러리를 정리하는 CoUninitialize이 호출됩니다. CoUninitialize는 msdn 설명서에서 설명한대로 나머지 모든 리소스를 정리합니다. CoUninitialize가 호출되기 전에 COM 개체의 Release 메서드를 호출해야합니다. 이후에 더 이상 존재하지 않으므로 CoUninitialize가 호출되기 전에 CComPtr 소멸자에 대한 호출이 발생하는지 확인해야합니다. 따라서 CComPtr은 정적으로 만들어서는 안됩니다.
- 1. PHP의 정적 변수 변수
- 2. JSP, 호스트 모드의 정적 변수, 정적 변수
- 3. 정적 변수
- 4. 정적 변수, 별도의 컴파일
- 5. 정적 변수 대 멤버
- 6. 정적 대 멤버 변수
- 7. C++ 정적 변수 해제
- 8. 정적/전역 변수
- 9. 헤더 파일의 정적 변수
- 10. C++의 정적 변수
- 11. 정적 변수 메모리 파괴
- 12. Seam의 정적 변수 범위
- 13. C++ 정적 변수 dynamic
- 14. 정적 최종 변수 초기화
- 15. 정적 멤버 변수
- 16. 정적 최종 변수
- 17. 정적 변수 포인터?
- 18. CodeIgniter의 정적 변수 메커니즘
- 19. 루비의 정적 변수
- 20. 액세스 정적 변수/마스터
- 21. 세션에서의 정적 변수
- 22. PHP 정적 변수
- 23. 정적 메서드의 전역 변수
- 24. C 정적 변수 초기화
- 25. 정적 변수 초기화 자바
- 26. 정적 변수 문제 JQuery에서
- 27. DataContext 정적 변수 사용
- 28. 정적 변수 및 함수
- 29. 정적 변수 란 무엇입니까?
- 30. Python의 정적 변수 상속
이미 질문에 답변하셨습니다. 예, 나빠요. –