나는 생성자와 소멸자에서 다른 클래스 (B)의 정적 변수 (STL 컨테이너)에 (정적 메서드를 통해 간접적으로) 액세스하는 클래스 (A)를가집니다.C++ 전역 객체의 소멸자 순서 제어
개체는 전역, 전역 상수, 다른 클래스의 정적 멤버 (자체적으로 전역 또는 정적 인스턴스가있을 수 있음) 또는 기본적으로 C++ 개체가 될 수있는 다른 위치에 저장 될 수 있습니다.
B 개체의 정적 멤버 앞에 A 개체가 생성되거나 B 개체의 정적 멤버가 소멸되면 어떤 시점에서 A 개체가 충돌합니다 (일반적으로 액세스 위반).
클래스 A의 모든 인스턴스 (누출 된 것들을 제외하고, "손실"되어 어떤 식 으로든 파괴되지 않을 것임)을 보장하는 방법이 있습니까? B의 정적 변수 이전에 파괴되고 파괴되었습니다.
특정 변수를 앞뒤로 생성/소멸시키는 몇 가지 솔루션을 보았습니다. 그러나 주어진 유형의 모든 인스턴스가 일반적인 경우는 아니므로이 방법에 접근하는 방법이 확실하지 않습니다.
그는 초기화에 대한 것이 아니라 파괴에 대해 묻고 있습니다. –
@Neil : 파괴 순서는 초기화 순서에 의해 결정됩니다. – GManNickG
그래서 "정적 컨테이너 컨테이너"를 "정적 컨테이너 및 getContainer() {정적 컨테이너 컨테이너; 컨테이너 반환}"로 변경할 수 있으며 생성자에서 직접 또는 간접적으로 getContainer를 호출 한 후에 할당 취소됩니까? A의 인스턴스가 나중에 프로그램의 어느 시점에서 global shared_ptr에 저장되면 어떻게 될까요? –