FreeMode

목록 요소를 삭제할 때 메모리 관리 플래그를 설정합니다.

void  FreeMode(
   bool  mode      // 새 값
   )

Parameters

mode

[in] 메모리 관리 플래그의 새 값.

Note

메모리 관리 플래그 설정은 CList 클래스 사용에 있어 중요한 부분입니다. 목록 요소는 동적 객체에 대한 포인터이므로 목록에서 제거할 때 동적 객체로 수행할 작업을 결정하는 것이 중요합니다.

플래그가 설정된 경우 리스트에서 요소를 제거할 때 삭제 연산자에 의해 요소가 자동으로 삭제됩니다. 플래그가 설정되지 않은 경우 삭제된 객체에 대한 포인터는 여전히 사용자 프로그램의 어딘가에 있으며 나중에 프로그램에 의해 할당 해제된다고 가정합니다.

사용자 프로그램이 메모리 관리 플래그를 재설정하는 경우 사용자는 프로그램 종료 전에 목록 요소를 제거해야 할 책임이 있음을 이해해야 합니다. 그렇지 않으면 새 연산자가 요소에 할당한 메모리가 해제되지 않습니다.

많은 양의 데이터의 경우 이는 터미널 충돌로 이어질 수도 있습니다.

사용자 프로그램이 메모리 관리 플래그를 재설정하지 않으면 다른 "위험"이 있는 것입니다. 목록의 포인터 요소가 로컬 변수의 어딘가에 저장되면 목록을 제거하면 사용자 프로그램의 심각한 오류와 충돌이 발생합니다. 기본적으로 메모리 관리 플래그가 설정됩니다. 즉, 목록의 클래스가 메모리 요소를 해제합니다.

예제:

//--- CList::FreeMode(bool) 예제  
#include <Arrays\List.mqh>  
//---  
void OnStart()  
  {  
   CList *list=new CList;  
   //---  
   if(list==NULL)  
     {  
      printf("객체 생성 오류");  
      return;  
     }  
   //--- 자유 모드 플래그 재설정  
   list.FreeMode(false);  
   //--- 목록 사용  
   //--- . . .  
   //--- 목록 삭제  
   delete list;  
  }