기고글 토론 "MQL5의 객체 생성 및 파괴 순서" - 페이지 2

 

m_array[]는 GetPointer(arrray[i]) 함수에서 복사되었으므로 POINTER_AUTOMATIC 유형이 됩니다.

54번째 줄은 필요 없습니다:

 if(CheckPointer(m_array[i])==POINTER_DYNAMIC) delete(m_array[i]);

왜냐하면 MQL5가 POINTER_AUTOMATIC을 삭제하기 때문입니다.

 

안녕하세요,


이 섹션을 이해할 수 없습니다:

//--- 이 블록은 실행==false이면 실행되지 않습니다.
   if(execute)
     {
      CObjectB objB;
     }
//--- 이 블록은 실행==false이면 실행됩니다.
   if(!execute)
     {
      CObjectC objC;
     }

코드의 시작 부분에 실행 = 거짓으로 설정되어 있습니다. 실행은 거짓과 같습니다.

첫 번째 IF: 실행이 참이면 블록이 실행되어야 합니다. 그러나 주석에는 true이면 실행하지 않고 다음 블록으로 넘어간다고 명시되어 있습니다.

두 번째 IF: 실행이 FALSE이면 블록이 실행됩니다. 그러나 다시 주석에 따르면 블록이 true이면 실행됩니다.

저는 ! - 는 부정 기호라고 가정했습니다.

제 추론의 오류는 어디에 있을까요?

 
kashi_ann:

안녕하세요,


이 줄거리를 이해할 수 없어요:

코드의 시작 부분에 실행 = 거짓으로 설정되어 있습니다. 실행은 거짓과 같습니다.

첫 번째 IF: 실행이 참이면 블록이 실행되어야 합니다. 그러나 이 주석은 참이면 실행되지 않고 다음 블록으로 넘어간다고 말합니다.

두 번째 IF: 실행이 거짓이면 블록이 실행됩니다. 그러나 이 경우에도 주석은 True이면 블록이 실행될 것이라고 말합니다.

저는 ! - 는 부정 기호라고 생각했습니다.

제 추론의 오류는 어디에 있나요?

잘못된 판단을 강조 표시해 두었습니다. 참고로 '거짓'은 False, '참'은 True입니다.

그리고 더 명확하게 하기 위해 주석을 추가했습니다:

//--- 이 블록은 실행==false이면 실행되지 않습니다.
//--- 이 블록은 실행==true이면 실행됩니다.
   if(execute)
     {
      CObjectB objB;
     }
//--- 이 블록은 실행==false이면 실행됩니다.
//--- 이 블록은 실행==true이면 실행되지 않습니다.
   if(!execute)
     {
      CObjectC objC;
     }
 
Vladimir Karputov:

잘못된 판단은 색상으로 강조 표시됩니다. 참고: '거짓'은 거짓, '참'은 참입니다.

그리고 더 명확하게 하기 위해 주석을 추가했습니다:

그래서... 다음 항목은...

if(execute = true) и if(execute) - тожественны?
if(execute = false) и if(!execute) - тоже?

맞죠?

 
kashi_ann:

Okay. 다음과 같은 메모가 표시됩니다.

맞죠?

기본 사항입니다.

 
Artyom Trishkin:

기본입니다.

감사합니다) 기본이 가장 중요합니다)

그리고 게으르지 않게 답변해 주셔서 감사합니다)
 
kashi_ann:

Okay. 다음과 같은 메모가 표시됩니다.

맞죠?

예, 하지만 =가 아니라 ==를 사용하고 싶었던 것이 분명합니다.

 
Andrey Khatimlianskii:

공교롭게도 그렇지만 =가 아닌 ==를 사용하고 싶었던 것이 분명합니다.

아니요))))) =와 ==의 의미와 차이점을 아직 파악하지 못했습니다) 저는 여정의 시작 단계에 있습니다.)

 
kashi_ann:

아니요)))) =와 ==의 의미와 차이점을 아직 파악하지 못했습니다) 저는 이제 막 시작 단계에 있습니다)).

"="는 할당 연산자이고 "=="는 비교 연산자입니다.
 

localvar_testscript_4.mq5 파일에서

GetPointer() 호출 후 포인터 유형을 출력하면 포인터가 POINTER_DINAMIC이 아닌 POINTER_AUTOMATIC이라는 것을 알 수 있습니다.

m_array[i]=GetPointer(array[i]);
Print(EnumToString(CheckPointer(m_array[i])));  //POINTER_AUTOMATIC이 아닌 POINTER_DINAMIC

따라서 이 줄은 실행되지 않습니다.

if(CheckPointer(m_array[i])==POINTER_DYNAMIC) delete(m_array[i]);