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

 

<quote.

이 선언 순서에서는 array [5] 가 소멸되기 전에 items_array가 소멸됩니다.items_array 소멸자에서 호출되는 Destroy() 함수에서는 아직 존재하는 객체에 대한 포인터를 사용하여 작업을 수행하므로 오류가 발생하지 않습니다.

안녕하세요 여러분!

이것은 내가 논리를 전혀 이해하지 못하는 곳입니다. =)

결국 소멸 메서드에서 우리는 포인터의 유형을 동적 유형과 비교합니다. 그리고 우리의 유형은 자동입니다. 따라서 삭제 연산자는 사용되지 않습니다.

그러나 자동으로 생성 된 객체가 자동으로 삭제되기 때문에 필요하지 않습니다.

마지막으로 파일은 클래스 외부의 메소드를 구현하는 단계에서 Destroy 및 SetArray 메소드의 반환 값 무효 유형을 지정하는 것을 잊어 버렸기 때문에 오류가 발생했습니다.

(저 같은) 초보자는 겁을 먹을 수 있습니다 =)


void CItemArray::Destroy(void)
  {
   for(int i=0;i<ArraySize(m_array);i++)
     {
      if(CheckPointer(m_array[i])!=POINTER_INVALID)
        {
         if(CheckPointer(m_array[i])==POINTER_DYNAMIC) delete(m_array[i]);
        }
      else Print("Invalid pointer to delete");
     }
  }