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

 
이 주제와 관련이 없는 댓글은 " MQL4 및 MQL5에 대한 모든 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 "으로 이동되었습니다.
 
Vladimir Simakov :
어서 해봐요! 그것이 내가 항상 사용하는 것입니다.

어디에? 어디서 어떻게?

사회자, 질문을 반복해서 죄송합니다. 나는 정말로 그것에 대한 답을 얻고 싶습니다.

 
Artyom Trishkin :

그리고 함수에 전달 된 포인터를 의도적으로 재할당한 이유는 무엇입니까? 물론 누수가 있을 것입니다. 그러나 이것은 "고전적인 누출"이 아니라 개체에 대한 포인터로 작업하는 고전적인 오류입니다.

여기에서 새 개체를 만들 필요는 없지만 함수에 전달되는 포인터인 외부 개체로 작업해야 합니다.

내가 아니야. 이 스레드에서 다른 사람의 코드에서 가져왔습니다. 예를 들어.
 
Dmitry Fedoseev :

어디에? 어디서 어떻게?

사회자, 질문을 반복해서 죄송합니다. 나는 정말로 그것에 대한 답을 얻고 싶습니다.

인내심을 가지세요. 집에 가서 버릴게.
 
Dmitry Fedoseev :

어디에? 어디서 어떻게?

사회자, 질문을 반복해서 죄송합니다. 나는 정말로 그것에 대한 답을 얻고 싶습니다.

질문을 올바르게 이해했다면 new를 사용하여 클래스를 객체로 선언합니다.
또한 생성된 객체 를 통해 점을 사용하여 클래스의 공용 메서드를 호출합니다.
호출된 모든 메소드를 실행한 후 생성된 삭제 객체를 삭제하여 메모리를 비웁니다.

 
Roman :

질문을 올바르게 이해했다면 new를 사용하여 클래스를 객체로 선언합니다.
또한 생성된 객체 를 통해 점을 사용하여 클래스의 공용 메서드를 호출합니다.
호출된 모든 메소드를 실행한 후 생성된 삭제 객체를 삭제하여 메모리를 비웁니다.

아니다. 처음에는 이것이 이와 같은 함수 매개변수라고 생각했습니다. 객체지만 참조가 아니라 끝에 세미콜론이 붙습니다. 이것이 선언할 때 일반적으로 객체를 생성하는 것이라면 괄호 안에 있는 이유는 무엇입니까? 따라서 그것은 세기의 미스터리로 남아 있습니다.

 
Dmitry Fedoseev :

아니다. 처음에는 이것이 이와 같은 함수 매개변수라고 생각했습니다. 객체지만 참조가 아니라 끝에 세미콜론이 붙습니다. 이것이 선언할 때 일반적으로 객체를 생성하는 것이라면 괄호 안에 있는 이유는 무엇입니까? 따라서 그것은 세기의 미스터리로 남아 있습니다.

대괄호 - 이것은 텍스트에 대한 메모이기 때문에))))
 
Artyom Trishkin :

그리고 함수에 전달 된 포인터를 의도적으로 재할당한 이유는 무엇입니까? 물론 누수가 있을 것입니다. 그러나 이것은 "고전적인 누출"이 아니라 개체에 대한 포인터로 작업하는 고전적인 오류입니다.

여기서 새 개체를 만들 필요는 없지만 외부 개체로 작업해야 하며 이 개체에 대한 포인터가 함수에 전달됩니다.

예, 제 예는 아니지만 MQL에서 포인터 자체의 구현 - 역참조할 필요가 없습니다(포인터도 개체 인스턴스에 할당할 수 있습니다!). 그러면 포인터를 전달하는 대신 전달할 수 있습니다. 개체에 대한 링크 https://www.mql5.com/en/forum/1111/page2471#comment_11796665

그런 다음 (CObj & obj)가 나타난 위치와 시간에 대한 정보가 전혀 없습니다(게다가 &는 포인터의 이름을 변경하는 작업이 아니라 GetPointer() 포인터를 가져오는 작업입니다).

좋아, 나는 비어 있는 상태에서 비어 있는 상태로 가고 싶지 않다... 나는 이미 나 자신에게 말했고 나는 그것을 포럼에서 다시 반복할 것이다 - MQL은 C++가 아니다, 기간! 그래서 구현 - 글쎄, 옵션이 없습니다

 
Igor Makanu :

예, 제 예는 아니지만 MQL에서 포인터 자체의 구현 - 역참조할 필요가 없습니다(포인터는 개체 인스턴스에 할당할 수도 있습니다!). 그러면 포인터를 전달하는 대신 포인터를 전달할 수 있습니다. 개체에 대한 링크 https://www.mql5.com/en/forum/1111/page2471#comment_11796665

그런 다음 (CObj & obj)가 나타난 위치와 시간에 대한 정보가 전혀 없습니다(게다가 &는 포인터의 이름을 변경하는 작업이 아니라 GetPointer() 포인터를 가져오는 작업입니다).

좋아, 나는 비어 있는 상태에서 비어 있는 상태로 가고 싶지 않다... 나는 이미 나 자신에게 말했고 나는 그것을 포럼에서 다시 반복할 것이다 - MQL은 C++가 아니다, 기간! 그래서 구현 - 글쎄, 옵션이 없습니다

당신은 무언가를 극화하고 있습니다. 여기에는 어려움과 이해가 없습니다.

 
Vladimir Simakov :
대괄호 - 이것은 텍스트에 대한 메모이기 때문에))))

자, 여기 있습니다.

이와 같이:

 void z(CObj * o){
}

다음과 같이 호출할 수 있기 때문에 가능하지도 않지만 더 좋습니다.

CObj obj;
z( GetPointer (obj));

참조로 포인터를 전달하는 경우 포인터에 대한 변수가 하나 더 필요합니다.

***

그리고 함수에서 객체를 생성하기 위해 함수에 대한 포인터를 전달해야 하는 경우 작동 방식은 다음과 같습니다.

 class CObj{
   public :
   int f(){
       return ( 33 );
   }
};

CObj * obj;

void OnStart (){
  z(obj);
  delete(obj);
}

void z(CObj & o){
   o = new CObj();
}
그것이 실제로 당신이 OOP에 대해 알고 싶었지만 물어보기가 두려웠던 모든 것입니다)))