AddArray

한 배열의 요소를 다른 배열의 끝에 추가합니다.

bool  AddArray(
   const CArrayObj *  src      // 소스에 대한 포인터 배열
   )

Parameters

src

[in] CArrayDouble 클래스 인스턴스에 대한 포인터 - 추가할 요소의 출처.

Return Value

성공적이면 true, 항목 추가 불가시 false.

Note

요소를 배열에서 배열로 추가하는 것은 실제로 포인터를 복사하는 것입니다. 그러므로 메소드를 호출할 때 함정이 존재하며 둘 이상의 변수에 동적 객체에 대한 포인터가 있을 수 있습니다.

//--- 예제
extern bool       make_error;
extern int        error;
extern CArrayObj *src;
//--- 새 인스턴스 CArrayObj를 생성
//--- 기본 메모리 관리가 켜져 있습니다
CArrayObj *array=new CArrayObj;
//--- 소스 배열에서 요소 추가(복사)
if(array!=NULL)
   bool result=array.AddArray(src);
if(make_error)
  {
   //--- 잘못된 동작 
   switch(error)
     {
      case 0:
         //--- 메모리 관리 플래그를 확인하지 않고 소스 어레이 제거 
         delete src;
         //--- 결과:
         //--- 수신기 배열에서 잘못된 포인터로 요소의 주소를 지정할 수 있습니다
         break;
      case 1:
         //--- 소스 어레이에서 메모리 관리 메커니즘 사용 안 함
         if(src.FreeMode()) src.FreeMode(false);
         //--- 그러나 원본 배열은 제거하지 마십시오
         //--- 결과:
         //--- 수신기 배열을 제거한 후 소스 배열에서 잘못된 포인터로 요소의 주소를 지정할 수 있습니다
         break;
      case 2:
         //--- 소스 어레이에서 메모리 관리 메커니즘 사용 안 함
         src.FreeMode(false);
         //--- 수신기 배열에서 메모리 관리 메커니즘을 사용하지 않도록 설정합니다 
         array.FreeMode(false);
         //--- 결과:
         //--- 프로그램 종료 후 "메모리 누수" 발생
         break;
     }
  }
else
  {
   //--- 소스 어레이에서 메모리 관리 메커니즘 사용 안 함
   if(src.FreeMode()) src.FreeMode(false);
   //--- 소스 배열 삭제
   delete src;
   //--- 결과:
   //--- 수신기 배열 요소의 주소가 올바릅니다
   //--- 수신기 배열을 삭제하면 해당 요소가 삭제됩니다
  }
 

예제:

//--- CArrayObj::AddArray(const CArrayObj*) 예제
#include <Arrays\ArrayObj.mqh>
//---
void OnStart()
  {
   CArrayObj *array=new CArrayObj;
   //---
   if(array==NULL)
     {
      printf("객체 생성 오류");
      return;
     }
   //--- 소스 배열 생성
   CArrayObj *src=new CArrayObj;
   if(src==NULL)
     {
      printf("객체 생성 오류");
      delete array;
      return;
     }
   //--- 자유 모드 플래그 재설정
   src.FreeMode(false);
   //--- 소스 어레이 채우기
   //--- . . .
   //--- 다른 배열 추가
   if(!array.AddArray(src))
     {
      printf("배열 추가 실패");
      delete src;
      delete array;
      return;
     }
   //--- 요소 없이 소스 배열 삭제
   delete src;
   //--- 배열 사용
   //--- . . .
   //--- 배열 삭제
   delete array;
  }