크로스 컴파일 단원의 초기화 순서

이른바 static 대상은 프로그램이 끝날 때까지 수명이 구조되어 있기 때문에
Stack과 Heap-based 대상은 모두 배제됩니다.이런 대상은 글로벌 대상을 포함하고
namespace 작용 영역 내의 대상,class 내,함수 내,그리고
file 역할 영역에서static로 성명된 대상입니다.함수 내의static 대상을
local static 대상 (함수에 대해 local이기 때문에), 기타 static
대상을 non-local static 대상이라고 합니다.프로그램이 끝날 때 static 대상은 자동으로
소각, 즉, 그것들의 분석 함수는main () 이 끝날 때 자동으로 호출됩니다.
이른바 컴파일러 단원(translation unit)은 단일 목표 파일을 생산하는 것을 가리킨다
(single object file)의 소스입니다.기본적으로 그것은 단일 원본 파일 더하기
포함된 헤더 파일입니다.
C++ "다른 컴파일러 단위에 정의된non-local static 대상"에 대한 초기
화 순서는 명확한 정의가 없다.
질문: 만약 어떤 컴파일러 단원 내의 어떤non-local static 대상의 초기
다른 컴파일러 단원 내의 어떤non-local static 대상을 사용합니다.
사용한 대상은 아직 초기화되지 않았을 수도 있습니다.
해결 방법: 모든non-local static 대상을 자신의 전속 함수로 옮깁니다 (이 대상은 여기에 있습니다
함수 내에서 static로 선언됨).이 함수들은reference가 가리키는 곳을 되돌려줍니다
포함된 객체그리고 사용자는 이 함수들을 호출해서 직접 이 대상을 가리키지 않는다.이것
전속 함수그 형식은 대체로 다음과 같다.
class classNameA
{
...
};
class classNameB
{
...
inline classNameA& clsNameAObj()
{
static classNameA clsNameA;
return clsNameA;
}
...
}

이 방법의 기초는 다음과 같습니다: C++ 보증, 함수 내의local static 대상은
"이 함수가 호출되는 동안"이 대상의 정의식을 처음 만났을 때 초기화됩니다.
그러나 다른 측면에서 보면 이 함수들이'static 대상을 포함한다'는 사실은 그들을
다중 스레드 시스템에는 불확실성이 있다.우리는 프로그램의 단일 스레드 시작 단계에서 손을 쓸 수 있다
모든 Reference-returning 함수를 호출합니다. 초기화와 관련된
레이싱 형식(race conditions)을 클릭합니다.
우리는 항상 내장형 대상을 수동으로 초기화해야 한다. 왜냐하면 C++는 그들을 초기화할 수 없기 때문이다.

좋은 웹페이지 즐겨찾기