MQL5 컴파일러는 클래스와 이에 대한 포인터를 구분하지 않습니다. - 페이지 7

 
Alexey Navoykov :
저것들. 일반적으로 포인터의 암시적 역참조를 금지할 것을 제안합니까? 나는 여기에서 많은 사람들이 그것에 대해 만족할 것이라고 생각하지 않습니다.

모두에게 선택권을 주세요

 #property strict

난 정말 그런 트릭이 필요하지 않습니다.

 
SemenTalonov :

글쎄, 그것은 말할 필요도 없다. 여기에 메모리 누수가 있습니다.

당신이 말하는 메모리 누수? 그렇다면? )))

 #property strict

class A
 {
  A*  item;
   int num;
public :
  A( int p= 10 ){num=p;item= NULL ;} ~A(){ if ( CheckPointer (item)== POINTER_DYNAMIC ) delete item;}
  A* operator =(A* par){ item = par; return & this ; }
  A* operator ~(){ return item; }
   int operator -(){ return num; }
 };

void OnStart ()
 {
  A a = new A( 20 );
   printf ( "В автообъекте %i (%i) сохранен динамический объект %i (%i), который он в конце своего цикла сам уничтожает..." ,&a,-a,~a,-~a);
 }


 
Ilya Malev :

당신이 말하는 메모리 누수? 그렇다면? )))


 delete item;

따라서 이것은 객체가 이러한 방식으로 처리될 준비가 되었다고 가정합니다. 얼마나 많은 사람들이 이것을 제공합니까?

 
SemenTalonov :

따라서 이것은 객체가 이러한 방식으로 처리될 준비가 되었다고 가정합니다. 얼마나 많은 사람들이 이것을 제공합니까?

나는 누군가가 new라는 단어를 쓴다면 그의 코드에서 삭제라는 단어가 어디에 있는지 정확히 알아야 한다고 생각합니다.

 
그건 그렇고,이 디자인이 약간 수정되면 "가비지 수집기"))))
 
SemenTalonov :

모두에게 선택권을 주세요

난 정말 그런 트릭이 필요하지 않습니다.

strict는 이미 MQL4에서 사용됩니다. 그렇다면 언어의 구문이 동일한 경우 어떻게 작동합니까?

글쎄, 그러한 행동에 대한 보호로서, 당신은 클래스에서 private 메소드를 만들 수 있습니다:

 class A
{
 private : void operator =( const A*);
}

솔직히 말해서, 나는 여기에 문제가 있다고 보지 않습니다. 클래스 개체에 무언가를 할당하면 선험적으로 복사 연산자 호출이 예상됩니다. 구함 - 받았습니다. 그것이 포인터인지 객체인지 무슨 차이가 있습니까? 클래스 유형은 동일합니다. 왼쪽 클래스를 지정할 수 없습니다. 그러므로 이 모든 것은 공허한 지루함에 가깝습니다.

포인터가 왼쪽에 있는 반대의 경우 - 또 다른 문제입니다. 포인터에 무언가를 할당하고 있다고 예상할 수 있지만 개체를 복사하는 것으로 나타났습니다.

 
Alexey Navoykov :

포인터가 왼쪽에 있는 반대의 경우 - 또 다른 문제입니다. 포인터에 무언가를 할당하고 있다고 예상할 수 있지만 개체를 복사하는 것으로 나타났습니다.

그리고 그것을 금지할 수 없습니다. 그렇지 않으면 정말로 필요할 때 객체를 복사할 수 없습니다.

결국 모든 것을 그대로 두어야 합니다. 당신이하고있는 일을 알고 계십시오.

 
fxsaber :

그리고 그것을 금지할 수 없습니다. 그렇지 않으면 정말로 필요할 때 객체를 복사할 수 없습니다.

결국 모든 것을 그대로 두어야 합니다. 당신이하고있는 일을 알고 계십시오.

영형! 주요 내용은 다음과 같습니다.

메모리 관리 모드를 지향하는 사람들이 많이 있습니까? AUTOMATIC과 DYNAMIC의 차이점 이해.

그리고 STATIC 및 BASED에 대해 들어본 적이 있는 사람(선택 사항이지만).

 
fxsaber :

그리고 그것을 금지할 수 없습니다. 그렇지 않으면 정말로 필요할 때 객체를 복사할 수 없습니다.

결국 모든 것을 그대로 두어야 합니다. 당신이하고있는 일을 알고 있습니다.

작동하지 않는 이유는 무엇입니까? 필요한 것을 가져오는 연산자 *& 도 있습니다.
 
Alexey Navoykov :
작동하지 않는 이유는 무엇입니까? 필요한 것을 가져오는 연산자 *& 도 있습니다.

* 는 어디에 있습니까?