class C {
public:
static C& Instance() {
static C c;
return c;
}
~C(){std::cout << "c destructed\n";}
private:
C(){}
};
class D{//similar to C but prints `d destructed` on destruction
//...
int main()
{
auto c = C::Instance();
auto d = D::Instance();
}
//outputs (with gcc)
//d destructed
//c destructed
//d destructed
//c destructed
나는 몇 가지 질문이 있습니다
- 이 파괴의 순서가 잘 정의 된 호출되어 있습니까? (클래스 C와 D가 다른 소스 파일에 정의 된 경우에도)
- 잘 정의 된 경우이 동작은 휴대용입니까?
내가 표준 실제로 그것을 정의라고 생각하지 않는다 객체 들로서 그들은 역순으로 파괴 되어야만하는 것인가? –
파괴 순서는 단일 [번역 단위] (https://en.wikipedia.org/wiki/Translation_unit_ (프로그래밍)) 내에서 잘 정의되어있다. 그러나 번역 단위 사이에는 존재하지 않습니다. –
[관련 질문 및 답변] (http://stackoverflow.com/q/246564/440558). –