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

 
SemenTalonov :

그것이 내가 복사에 대해 기대했던 것입니다. 기본 복사 생성자는 버그가 아닙니다.

그러나 Dmitry 는 메모리의 새 개체가 할당되고 POINTER_AUTOMATIC 유형의 포인터가 반환되며 복사본이 없을 것이라고 주장합니다.

모두가 각자의 방식으로 MQL의 단점을 이해합니다.)

응. 산타클로스는 존재하지 않습니다.

나는 기억 속의 어떤 대상에 대해서도 쓰지 않았다.

좋아, 한 번 논쟁이 있었다 - 포인터와 링크를 구별하는 방법. 그러나 이제는 개체를 포인터와 구별할 수 없는 것 같습니다.

 
Dmitry Fedoseev :

개체의 복사본은 어디에서 올까요? 포인터의 복사본 - 예, 하지만 동일한 개체를 가리킵니다.

객체 배열이 있습니다. 이 배열의 첫 번째 요소 에서 할당 연산자 가 호출되어 별도로 생성된 개체가 전달됩니다(연산자는 선언되지 않음). 그 다음에 이 배열의 첫 번째 요소에 무엇이 있어야 한다고 생각합니까? 제 생각에는 개체가 남아 있어야 합니다.

 
SemenTalonov :

나는 또한 명시적으로 선언된 복사 생성자가 이 테스트에서 아무 것도 변경하지 않을 것이라고 이것을 썼습니다.

어떻게 뻔한 것을 보지 못합니까?

포인터는 객체 배열의 요소에 배치되고 객체는 포인터 배열의 요소에 배치됩니다. 이것이 정말 정상입니까?

첫 번째 경우에는 개체에 대한 포인터가 배열로 이동하고 두 번째 경우에는 복사 생성자가 작동해야 하는데 이러한 작업이 어떻게 동일할 수 있습니까?

복사 생성자가 아니라 할당 연산자이지만 사소한 일입니다.

개체 배열의 요소에는 "포인터"가 포함되어 있지 않습니다. 객체 배열의 요소는 정확히 객체를 포함해야 합니다.

첫 번째 경우에는 정확히 어떤 종류의 "포인터"가 있는 객체 배열이 있습니까?

 
Georgiy Merts :

객체 배열이 있습니다. 이 배열의 첫 번째 요소 에서 할당 연산자 가 호출되어 별도로 생성된 개체가 전달됩니다. 그 다음에 이 배열의 첫 번째 요소에 무엇이 있어야 한다고 생각합니까? 제 생각에는 개체가 남아 있어야 합니다.

그리고 ... 일반적으로 모든 것이 좋지 않습니다))) 자동 포인터의 배열과 동적으로 생성된 개체도 여기에 푸시됩니다. 그런 다음 3개의 개체, 그 중 2개는 자동으로 삭제되고 1개는 누출됩니다. 컴파일하면.

 

다음과 같아야 합니다.

A* m_A[ 2 ];

그래서:

m_A[ 0 ] =GetPointer(a); 
 

그리고 마지막에 다음과 같이 합니다.

 for ( int i= 0 ;i< 2 ;i++) if ( CheckPointer (m_A[i])==POINTER_DINAMIC) delete (m_A[i]); 
 
Dmitry Fedoseev :

그리고 ... 일반적으로 모든 것이 좋지 않습니다))) 자동 포인터의 배열과 동적으로 생성된 개체도 여기에 푸시됩니다.

드디어!))

조지 머츠 :

객체 배열의 요소는 정확히 객체를 포함해야 합니다 .

첫 번째 경우에는 정확히 어떤 종류의 "포인터"가 있는 객체 배열이 있습니까?

그게 내가 말하는거야! 작동하는 이유는 무엇입니까?!

m_A[ 1 ] = new A();
 
SemenTalonov :

드디어!))

그게 내가 말하는거야! 작동하는 이유는 무엇입니까?!

A가 다음과 같이 선언된 경우:

A* m_A[ 2 ]; 

괜찮습니다.

그렇다면:

A m_A[ 2 ]; 

그러면 컴파일되지 않아야 합니다. 컴파일러의 버그이거나 컴파일러가 모든 사람을 위해 모든 것을 생각할 의무는 없습니다.

 
버그가 아닐 가능성이 높으므로 간단한 개체 할당이 작동해야 합니다. 그런 다음 new를 통해 생성된 개체를 삭제하는 데 주의해야 합니다.
 
Dmitry Fedoseev :

그러면 컴파일되지 않아야 합니다. 컴파일러의 버그이거나 컴파일러가 모든 사람을 위해 모든 것을 생각할 의무는 없습니다.

빙고!

정액Talonov 2019.01.10 07:36 POINTER_DYNAMIC 유형의 포인터를 저장할 수 있으며 그 반대 의 경우도 마찬가지입니다.