객체 생성 및 삭제

실행을 위해 MQL5 프로그램을 로드한 후에는 유형에 따라 각 변수에 메모리가 할당됩니다. 액세스 수준에 따라 모든 변수는 글로벌 변수로컬 변수의 두가지 유형으로 나뉩니다. 메모리 클래스에 따라 MQL5 프로그램의 입력 매개변수가 될 수 있습니다. 정적 및 자동으로. 필요한 경우 각 변수는 해당 값으로 초기화됩니다. 변수를 사용한 후 변수가 초기화되지 않고 사용된 메모리가 MQL5 실행 파일 시스템으로 반환됩니다.

전역 변수의 초기화 및 초기화 취소

전역 변수는 MQL5 프로그램이 로드된 직후와 함수가 호출되기 전에 자동으로 초기화됩니다. 초기화 중에 초기 값은 단순 유형의 변수에 할당되고 생성자(있는 경우)가 객체에 대해 호출됩니다. 입력 변수는 항상 글로벌 수준에서 선언되며 프로그램 시작 중에 대화 상자에서 사용자가 설정한 값으로 초기화됩니다.

일반적으로 정적 변수가 로컬 수준에서 선언되지만 이러한 변수에 대한 메모리는 사전 할당되며 글로벌 변수와 마찬가지로 프로그램이 로드된 직후 초기화가 수행됩니다.

초기화 순서는 프로그램의 변수 선언 순서에 해당합니다. 초기화 취소는 역순으로 수행됩니다. 이 규칙은 새 연산자가 생성하지 않은 변수에 대해서만 적용됩니다. 이러한 변수는 로드 직후 자동으로 생성 및 초기화되며 프로그램 언로드 전에 초기화 취소됩니다.

로컬 변수의 초기화 및 초기화 취소

로컬 수준에서 선언된 변수가 정적 변수가 아닌 경우 해당 변수에 대해 메모리가 자동으로 할당됩니다. 로컬 변수와 전역 변수는 프로그램 실행이 선언을 충족하는 시점에 자동으로 초기화됩니다. 따라서 초기화 순서는 선언 순서에 해당합니다.

로컬 변수는 선언된 프로그램 블록의 끝에서 선언과 반대 순서로 초기화됩니다. 프로그램 블록은 복합 연산자인데, 이는 다음 선택 연산자들의 부분이 될 수 있습니다: switch, 루프 연산자 (for, while, do-while), 함수 바디: if-else 연산자.

로컬 변수는 프로그램 실행이 변수 선언을 충족하는 순간에만 초기화됩니다. 프로그램 실행 중에 변수가 선언된 블록이 실행되지 않은 경우 이러한 변수는 초기화되지 않습니다.

배치된 개체의 초기화 및 초기화 해제

포인터 선언에는 해당 개체의 초기화가 수반되지 않기 때문에 객체 포인터를 사용하는 경우가 특별합니다. 동적으로 배치된 객체는 클래스 샘플이 new 연산자에 의해 생성되는 순간에만 초기화됩니다. 객체의 초기화는 해당 클래스의 생성자의 호출을 전제로 합니다. 클래스에 해당 생성자가 없으면 simple 유형의 멤버가 자동으로 초기화되지 않고 문자열, 동적 배열복합 객체 유형의 멤버가 자동으로 초기화됩니다.

포인터는 로컬 또는 글로벌 수준에서 선언할 수 있으며 NULL의 빈 값 또는 동일하거나 또는 상속된 유형의 포인터 값으로 초기화할 수 있습니다. 로컬 수준에서 선언된 포인터에 대해 new 연산자를 호출하는 경우, 해당 수준을 종료하기 전에 이 포인터에 대한 삭제 연산자를 수행해야 합니다. 그렇지 않으면 포인터가 손실되고 개체의 명시적 삭제가 실패합니다.

object_pointer=new Class_name 표현식으로 작성된 모든 개체는 delete(object_pointer) 연산자에 의해 삭제되어야 합니다. 어떤 이유로 프로그램이 완료될 때 삭제 연산자가 이러한 변수를 삭제하지 않으면 해당 항목이 "Experts" 저널에 나타납니다. 여러 변수를 선언하고 한 개체의 포인터를 모든 변수에 할당할 수 있습니다.

동적으로 작성된 객체에 생성자가 있는 경우 new 연산자 실행 시 이 생성자가 호출됩니다. 개체에 소멸자가 있는 경우 delete 연산자를 실행하는 동안 호출됩니다.

따라서 동적으로 배치된 객체는 해당 new 연산자가 호출되는 순간에만 생성되며 프로그램 언로드 중에 delete 연산자에 의해 또는 MQL5의 실행 시스템에 의해 자동으로 삭제됩니다. 동적으로 생성된 개체의 포인터 선언 순서는 초기화 순서에 영향을 주지 않습니다 초기화 및 초기화 해제 순서는 프로그래머가 완전히 제어합니다.

MQL5의 동적 메모리 할당

동적 배열로 작업할 때 릴리스된 메모리는 즉시 운영 체제로 돌아갑니다.

new 연산자를 사용하여 동적 클래스 개체로 작업할 때 메모리 관리자가 작업 중인 클래스 메모리 풀에서 첫 번째 메모리가 요청됩니다. 풀에 메모리가 충분하지 않으면 운영 체제에서 메모리가 요청됩니다. delete 연산자를 사용하여 동적 개체를 삭제하면 릴리스된 메모리가 클래스 메모리 풀로 즉시 반환됩니다.

메모리 관리자는 다음 이벤트 처리 기능을 종료한 후 즉시 운영 체제로 메모리를 다시 해제합니다: OnInit(), OnDeinit(), OnStart(), OnTick(), OnCalculate(), OnTimer(), OnTrade(), OnTester(), OnTesterInit(), OnTesterPass(), OnTesterDeinit(), OnChartEvent(), OnBookEvent().

변수의 간략한 특성

생성, 삭제 순서, 생성자 및 소멸자 호출에 대한 주요 정보가 아래 표에 나와 있습니다.


글로벌 자동 변수

로컬 자동 변수

동적으로 생성된 객체

초기화

mql5 프로그램이 로드된 직후

실행 중에 선언된 코드 행에 도달하는 경우

new 연산자 실행시

초기화 주문

선언 순서대로

선언 순서대로

선언 순서를 불문

초기화 해제

mql5 프로그램을 언로드하기 전에

선언 블록을 실행 종료할 때

delete 연산자가 실행되거나 mql5 프로그램이 언로드되기 전에

초기화 해제 순서

초기화 순서와 반대 순서로

초기화 순서와 반대 순서로

초기화 순서와 상관없이

생성자 호출

mql5 프로그램 로딩시

초기화시

new 연산자 실행시

소멸자 호출

mql5 프로그램 언로딩시

변수가 초기화된 블록을 종료할 때

delete 연산자 실행시

오류 로그

자동으로 작성된 오브젝트를 삭제하려는 시도에 대한 메시지를 "Experts" 저널에 기록합니다

자동으로 작성된 오브젝트를 삭제하려는 시도에 대한 메시지를 "Experts" 저널에 기록합니다

mql5 프로그램 언로드 시 동적으로 생성되지 않은 개체에 대한 메시지를 "Experts" 저널에 기록합니다

더 보기

데이터 유형, 유형의 캡슐화 및 확장성,변수 초기화, 가시성 범위 및 변수 수명