MQL5의 OOP에 대한 질문 - 페이지 7

 
Dmitry Fedoseev :

객체의 개수를 미리 알고 있고 프로그램 작동 중에 일정하면 새 객체가 필요하지 않습니다. 다른 모든 경우 - 새로운.

추측하지 못했습니다. 여기 내 예가 있습니다. https://www.mql5.com/ru/forum/160683/page861#comment_11840254

여기서 생성자에 매개변수를 전달하는 것이 편리하고 사용자가 설정을 변경한 경우 OnDeinit()에서 클래스를 종료한 다음 새 매개변수로 OnInit()에서 생성하는 것이 더 빠릅니다.

;)

 
Igor Makanu :

추측하지 못했습니다. 여기 내 예가 있습니다. https://www.mql5.com/ru/forum/160683/page861#comment_11840254

생성자에 매개변수를 전달하는 것이 편리하고 사용자가 설정을 변경한 경우 OnDeinit()에서 클래스를 종료한 다음 새 매개변수로 OnInit()에서 생성하는 것이 더 빠릅니다.

;)

매개변수는 new 없이 생성자에 전달할 수 있습니다.

 
Dmitry Fedoseev :

매개변수는 new 없이 생성자에 전달할 수 있습니다.

그리고? 클래스 필드를 어떻게 변경할 것인가(사용자가 EA 설정을 변경함)? - 한 가지 방법을 더 쓸 것인가? 당신은 더 많은 것을 위해 마지막 페이지에 있습니다"   포인터에 대한 하나의 변수. "싸웠고 여기에 전체 방법이 있습니다!

;)

 
Igor Makanu :

그리고? 클래스 필드를 어떻게 변경할 것인가(사용자가 EA 설정을 변경함)? - 한 가지 방법을 더 쓸 것인가? 당신은 더 많은 것을 위해 마지막 페이지에 있습니다"   포인터에 대한 하나의 변수. "싸웠고 여기에 전체 방법이 있습니다!

;)

 input int a1= 1 ;
input int a2= 2 ;

class CX{
   public :
   void CX( int a, int b){
   
   }
};

CX cx(a1,a2);
 
Dmitry Fedoseev :

가지 않을거야 ;)

 #property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property strict
input int a1= 1 ;
input int a2= 2 ;
//+------------------------------------------------------------------+
class CX
  {
public :
   int a1,a2;
   void CX( int a, int b) {a1=a;a2=b; }
  };
CX cx(a1,a2);  
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit ()
  {

   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
  }
//+------------------------------------------------------------------+
void OnTick ()
  {
       Comment ( "cx.a1 = " ,cx.a1, "\ncx.a2 = " ,cx.a2);
  }
//+------------------------------------------------------------------+

고문 설정 변경

 
Igor Makanu :

가지 않을거야 ;)

고문 설정 변경

멋진 매복.

하지만 매개변수 때문에 new를 사용하기 보다는 매개변수를 변경하는 메서드를 추가하는 것을 선호합니다.
 
Dmitry Fedoseev :

멋진 매복.

하지만 매개변수 때문에 new를 사용하기 보다는 매개변수를 변경하는 메서드를 추가하는 것을 선호합니다.

새로운 미신을 사용하지 않으려면? )))

IMHO, 편리하면 사용해야합니다! - 2번의 클릭에 대한 예제는 new를 사용하여 다시 작성되고 모든 것이 올바르게 작동하고 사용자가 설정을 변경할 때 상황을 처리합니다.

 #property strict
input int a1= 1 ;
input int a2= 2 ;
//+------------------------------------------------------------------+
class CX
  {
public :
   int a1,a2;
   void CX( int a, int b) {a1=a;a2=b; }
  };
CX *cx;
//+------------------------------------------------------------------+
int OnInit ()
  {
   cx = new CX(a1,a2);
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
   delete cx;
  }
//+------------------------------------------------------------------+
void OnTick ()
  {
       Comment ( "cx.a1 = " ,cx.a1, "\ncx.a2 = " ,cx.a2);
  }
//+------------------------------------------------------------------+
 
Igor Makanu :

새로운 미신을 사용하지 않으려면? )))

IMHO, 편리하면 사용해야합니다! - 2번의 클릭에 대한 예제는 new를 사용하여 다시 작성되고 모든 것이 올바르게 작동하고 사용자가 설정을 변경할 때 상황을 처리합니다.

미신이 아니라, 역사적으로 상황에 따라 확립된 게으름일 뿐입니다. 삭제를 작성해야 하며 Deinit()에서 합니다. 그러나 Deinit() 함수는 기본적으로 템플릿에 없었습니다. 지금 보고 있습니다. EA 템플릿에 Deinit()가 있지만 이전에는 없었습니다.

 
Dmitry Fedoseev :

미신이 아니라, 역사적으로 상황에 따라 확립된 게으름일 뿐입니다. 삭제를 작성해야 하며 Deinit()에서 합니다. 그러나 Deinit() 함수는 기본적으로 템플릿에 없었습니다. 지금 보고 있습니다. EA 템플릿에 Deinit()가 있지만 이전에는 없었습니다.

삭제를 작성하지 마십시오. 모든 것이 올바르게 작동합니다. 이 죄(미신에 대해 이야기하고 있습니다)))가 터미널을 인수하고 "48바이트의 누출된 메모리" 로그에서 중얼거린 다음 "2개의 CX 유형의 개체가 남습니다" 및 "삭제되지 않은 개체가 남음"

추신: 표시기 생성 템플릿에는 Deinit()이 없습니다.

 
Igor Makanu :

삭제를 작성하지 마십시오. 모든 것이 올바르게 작동합니다. 이 죄(미신에 대해 이야기하고 있습니다)))가 터미널을 인수하고 "48바이트의 누출된 메모리" 로그에서 중얼거린 다음 "2개의 CX 유형의 개체가 남습니다" 및 "삭제되지 않은 개체가 남음"

추신: 표시기 생성 템플릿에는 Deinit()이 없습니다.

삭제하지 않고도 작동하지만 요점은 무엇입니까? 그러나 터미널이 이 문제를 처리합니까? 메모리 누수만 보고하지만 동일한 개체를 할당하지 않습니다.