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

 
Vladimir Simakov :

예, 여기에는 포인터가 없습니다.) 클래스에 대한 핸들이 있지만 이를 사용하는 작업은 포인터로 작업하는 것과 유사하지만 공통된 모든 것이 끝나는 곳입니다.

2박 2일 동안 호기심 많은 마음과 장난스런 손이 날 괴롭혔어

범위 외부에서 동적으로 생성된 개체를 삭제하려고 했습니다. 함수에서 다음을 입력하여 여전히 솔루션에 도달했습니다.

 class CTest
{
public :
   ~CTest() { Print ( __FUNCTION__ ); }
};
//+------------------------------------------------------------------+
void OnStart ()
{
   CTest* _test = new CTest;
   deleteCTest(_test);
}
//+------------------------------------------------------------------+
void deleteCTest(CTest* &t)
{
   delete t;
}

그런 식으로 삭제하지만 즉시 추측합니다 .... 도움말이나 안보리에서 포인터를 전달하는 유사한 기능 서명을 찾지 못했습니다.


다른 질문:

그러나 함수 실행의 결과로 참조로 개체에 대한 포인터를 반환하는 방법은 무엇입니까?

저것들. 다음과 같이 하고 싶습니다.

CTest ret_CTest()
{
   CTest *result = new CTest;
   return (result);
}


문제 없이 CTest *를 반환할 수 있지만 ret_CTest()를 작성한 것처럼 오류가 발생합니다.

 
Igor Makanu :

2박 2일 동안 호기심 많은 마음과 장난스런 손이 날 괴롭혔어

범위 외부에서 동적으로 생성된 개체를 삭제하려고 했습니다. 함수에서 다음을 입력하여 여전히 솔루션에 도달했습니다.

그런 식으로 삭제하지만 즉시 추측합니다 .... 도움말이나 안보리에서 포인터를 전달하는 유사한 기능 서명을 찾지 못했습니다.

out of scope은 무슨 뜻인가요? 함수에 전달했으므로 거기에서 볼 수 있습니다)

추신 이것이 없으면 void deleteCTest(CTest* & t) & 동일하게 작동해야 합니까?

생성된 영역 외부에서 실제로 삭제하고 심지어 자동으로 삭제하려면 다음이 필요합니다. ... 쉿 ... 아무도 듣지 않는 동안 ... 패턴 팩토리 ... 더 빠르게 읽고 삭제 ...

 

Igor Makanu :


그러나 함수 실행의 결과로 참조로 개체에 대한 포인터를 반환하는 방법은 무엇입니까?

문제 없이 CTest *를 반환할 수 있지만 ret_CTest()를 작성한 것처럼 오류가 발생합니다.
코셔를 원하신다면
CTest& Foo();
, 아직 운명은 아니지만 그렇다면:
CTest Foo();

, 클래스에 복사 생성자가 있어야 합니다.

CTest(CTest &other)...
 
Aleksey Mavrin :

추신 이것이 없으면 void deleteCTest(CTest* & t) & 동일하게 작동해야 합니까?

많은 것을 배우게 될 것입니다.

나는 MQL의 포인터가 매우 유익한 것이라고 다시 씁니다.)))


블라디미르 시마코프 :
코셔를 원한다면 아직 운명은 아니지만 그렇다면:

, 클래스에 복사 생성자가 있어야 합니다.

다시 생각해야 한다

GetPointer() 를 사용하여 일종의 트릭을 수행할 수 있다는 의혹이 있습니다. 하지만 사실은 그렇지 않습니다. 여기에서 "공간과 시간을 뛰어 넘는 것"입니다. 포인터와 MQL의 암시적 역참조를 통해 - 이것은 세뇌입니다! !! (((

 
Igor Makanu :

많은 것을 배우게 될 것입니다.

나는 MQL의 포인터가 매우 유익한 것이라고 다시 씁니다.)))

삭제하지만 이 방법으로 _test의 새 값을 할당할 수 없습니다. MQL은 그건 그렇고))))

 
Igor Makanu :

많은 것을 배우게 될 것입니다.

나는 MQL의 포인터가 매우 유익한 것이라고 다시 씁니다.)))


다시 생각해야 한다

GetPointer()를 사용하여 일종의 트릭을 수행할 수 있다는 의혹이 있습니다. 하지만 사실은 그렇지 않습니다. 여기에서 "공간과 시간을 뛰어 넘는 것"입니다. 포인터와 MQL의 암시적 역참조를 통해 - 이것은 세뇌입니다! !! (((

예, 여기에서 모든 것이 좋습니다.))) 샤프를 끄십시오. 힌트조차 없습니다.)))

 
Igor Makanu :

많은 것을 배우게 될 것입니다.

나는 MQL의 포인터가 매우 유익한 것이라고 다시 씁니다.)))

글쎄, 나는 확인했다. & 없이 완벽하게 삭제됨 ;)

그리고 프린트가 안 나온다는 사실을 MT4와 MT5에서 해보고 비교)

 class CTest
{
public :
   CTest() { Print ( __FUNCTION__ ); }
   ~CTest() { Print ( __FUNCTION__ ); }
};
//+------------------------------------------------------------------+
void OnStart ()
{
   CTest* _test = new CTest();
   deleteCTest(_test);
}
//+------------------------------------------------------------------+
void deleteCTest(CTest* t)
{
   delete t;
}
 
Aleksey Mavrin :

글쎄, 나는 확인했다. & 없이 완벽하게 삭제됨 ;)

그리고 프린트가 안 나온다는 사실을 MT4와 MT5에서 해보고 비교)

완전한 예를 제공하지 않았지만 오늘 나는

이것은 & 없이는 작동하지 않습니다

 class CTest
{
public :
   ~CTest() { Print ( __FUNCTION__ ); }
};
//+------------------------------------------------------------------+
void OnStart ()
{
   CTest* _test = new CTest;
   deleteCTest(_test);
   delete _test;
}
//+------------------------------------------------------------------+
void deleteCTest(CTest* & t)
{
   delete t;
   t = new CTest;
}
//+------------------------------------------------------------------+

블라디미르 시마코프 :

예, 여기에서 모든 것이 좋습니다.))) 샤프를 끄십시오. 힌트조차 없습니다.)))


예, 저는 Sharp를 찾고 있는 것이 아닙니다. MQL로 여전히 이해하고 있습니다. 이해가 되지 않습니다.

 
Igor Makanu :

완전한 예를 제공하지 않았지만 오늘 나는

따라서 & 없이는 작동하지 않습니다

당연히. 포인터를 값으로 전달하므로 포인터의 복사본이 생성됩니다. 그것을 통해 당신은 객체를 죽일 것이고, 당신은 함수에서 생성되는 포인터를 위한 새로운 객체를 생성할 것입니다. 이것은 C++입니다, 환영합니다
 
Igor Makanu :

완전한 예를 제공하지 않았지만 오늘 나는

이것은 & 없이는 작동하지 않습니다



내 생각에 이것은 링크와 관련이 없지만 함수가 작동한 후 함수 인수 가 값을 유지하려면 포인터로 전달해야 한다는 사실에만 관련이 있습니다. 예를 들어 링크가 아닌 파일이나 표시기의 핸들에서도 마찬가지입니다.

그리고 오래전부터 어렴풋이 기억이 나는데도 C++는 항상 이랬던 것 같습니다.