2012-12-27 7 views
4

나는 정적 전역 함수 (안 정적 클래스, 정적 전역) 내에서 정적 지역 변수 ...이있는 경우정적 전역 기능의 정적 로컬 멤버입니까?

foo.cpp의 :

static void f() 
{ 
    static T x; 
    ... 
} 

를 통해 싱글 보장은 x의 인스턴스 신청?

두 번역 단위가 위와 같이 정의 된 경우 static void f(). 그들 각각은 자신의 x 인스턴스를 갖거나 공유 할 것인가? 왜?

답변

4

static 기능 내부 링크가, 각각의 변환 단위의 각 f 다른 독립 함수가 될 것이고, 변환 단위 x 인스턴스있을 것이다.

2

x 인스턴스가 응용 프로그램 전체에 걸쳐 싱글 톤이 보장됩니까?

처음으로 f()이 호출 될 때 생성된다는 보장이 있습니다. 이것은 static storage duration object이며, 나머지는 static storage duration object (생성의 역순)으로 파괴된다는 것을 의미합니다.

이 변수 xf() 함수에서만 볼 수 있습니다.

두 번역 단위가 위와 같이 정적 공백 f()를 정의하면 어떻게 될까요? 그들 각각은 자신의 x 인스턴스를 갖거나 공유 할 것인가? 왜?

정적 함수이기 때문에. 번역 단위에 국한되어 있습니다. 이 함수를 정의하는 각 번역 단위에는 함수와 내부 변수의 자체 복사본이 있습니다. 이것은 번역 단위 외부에 노출되지 않으므로 번역 단위 내에서만 가능합니다.

관련 문제