2012-03-01 4 views
0

정적 멤버가 내 머리글을 어지럽히는 데 관심이 없다는 것은 cpp 본문의 무료 기능에서만 사용되기 때문입니다. 여기서 정적 변수를 선언하면 정적 멤버와 마찬가지로 하나의 주소 만 차지하게됩니까?정적 비 멤버 변수는 프로그램의 모든 스레드와 동일한 변수입니까?

죄송하지만 C++에서 무수히 많은 정적 기능을 사용하는 것이 확실하지 않습니다.

나는의 라인을 따라 생각하고 :

static Osp::Base::Runtime::Monitor sharedMonitor; 
+0

제가 생각하기에 http://stackoverflow.com/questions/572547/what-does-static-mean-in-ac-program/572550#572550이 좋은 시작 지점입니다. –

+0

@NicolasMartin : 정적 멤버가 여기 좋니? – John

답변

0

첫째, "정적"라는 단어는 C++에서 두 가지 의미가 있습니다 : 그것은 차례로 위치에 따라 다른 효과를 가지고 키워드 static (참조 할 수 있습니다 )를 사용하거나 변수의 수명을 참조 할 수 있습니다. 모두 변수에 정적 수명이 있습니다.

당신이 말하는 바에 따르면 정적 인 수명의 변수를 찾고 있는데,이 변수는 단일 번역 단위 외부에 표시되지 않습니다. static를 선언

namespace { 
int myWhatever;  // No keyword static... 
} 

클래스의 멤버 변수 (함수 내) 지역 변수처럼 같은 정적 수명이 선언되어이를위한 바람직한 방법은 이름 공간에서 변수를 정의하는 것이다 static.

이러한 변수는 번역 단위에서 해당 정의 이후 어디에서나 액세스 할 수 있지만 그 밖의 곳에서는 액세스 할 수 없습니다. 그것은 하나의 인스턴스를 가지고 있는데, 이는 이 프로그램의 시작 부분에 오게되고, 프로그램이 실행되는 한 동안 지속됩니다. 생성자가있는 경우 main 전에 호출 된 (또는 동적 객체가로드 될 때 동적 인 연결이 사용되는 경우)이고, exit에 이 호출 된 후 소멸자가 호출됩니다 (또는 동적 객체가 언로드, 동적 연결 인 경우 사용).

스레드에 관해서

, C++ 11은 스토리지 클래스 지정자 thread_local을 갖는다 :이 지정 선언 변수는 스레드 그 등가 인 수명으로 인스턴스 스레드 당 있다. 최초 사용 전에 초기화 (구성)되고 스레드가 종료 될 때 이 소멸됩니다. 이것은 정적 인 과 다른 것입니다.

1

예. 네임 스페이스 범위에서 정적 변수를 정의하면 정의 된 변환 단위 내에서 액세스 할 수있는 해당 변수의 인스턴스가 하나 있습니다.

+0

정적 멤버 방식을 시도했지만 임의적 인 충돌이 계속 발생합니다. 필자가 보았던 모든 예제는 클래스 선언 밖에서 어떤 종류의 정의가 필요하지만이 클래스로 어떻게 할 수 있는지 알지 못합니다. – John