오류, 버그, 질문 - 페이지 1785

 
fxsaber :
소멸자가 무엇을 위한 것인지 알고 있습니다. 왜 가상이라는 단어를 그 정의보다 먼저 지정하는지 나에게 명확하지 않습니까?
소멸자가 다르기 때문에 C ++와의 코드 호환성을 위해 포스트스크립트가 필요합니다.
 
A100 :
소멸자가 다르기 때문에 C ++와의 코드 호환성을 위해 포스트스크립트가 필요합니다.
이해했습니다 감사합니다. MQL5로 많이 이식합니까? - 왜 그런 구체적인 예가 있습니까?
 
fxsaber :
소멸자가 무엇을 위한 것인지 알고 있습니다. 왜 가상이라는 단어를 그 정의보다 먼저 지정하는지 나에게 명확하지 않습니까?

가상 함수와 소멸자 >>>

주요 규칙: 클래스에 하나 이상의 가상 함수가 있는 경우 소멸자도 가상으로 만들어야 합니다. 동시에 기본 소멸자는 가상이 아니므로 명시적으로 선언해야 한다는 사실을 잊어서는 안 됩니다. 그렇지 않으면 거의 확실하게 프로그램에 메모리 누수가 발생합니다. 다시, 많은 마음이 필요하지 않은 이유를 이해합니다. 몇 가지 예를 살펴보겠습니다.

 
fxsaber :
이해했습니다. 감사합니다. MQL5로 많이 이식합니까? - 왜 그러한 구체적인 예가 있습니까?
나는 조금 포트. 언뜻보기에만 특정합니다. 여기에서 "전문가" 중 한 명이 TOTAL 이상의 파생 클래스 가 유해하다고 썼습니다. 제대로 초기화하는 데 3-4개의 기본 클래스만 있으면 되는 경우가 많습니다. 그런 다음에만 실제 파생 상품이 시작됩니다.
 
Anatoli Kazharski :

가상 함수와 소멸자 >>>

int main()
{
    A * pA = new B;
     delete pA;
     return EXIT_SUCCESS;
}

이때 객체는 원래대로 생성되고 소멸되면 파생 클래스의 소멸자가 호출되지 않아 메모리 누수가 발생한다.

이것은 삭제가 기본 클래스에 대한 포인터를 통해 수행되고 컴파일러가 조기 바인딩을 사용하여 소멸자를 호출하기 때문에 발생합니다. 기본 클래스의 소멸자는 파생 클래스에 대해 아무것도 모르기 때문에 파생 클래스의 소멸자를 호출할 수 없습니다. 결과적으로 파생 클래스에 할당된 메모리의 일부가 복구 불가능하게 손실됩니다.

이를 방지하려면 기본 클래스의 소멸자를 가상으로 선언해야 합니다.

기본 소멸자를 가상으로 만들면 파생 소멸자에 대한 정보가 나타나는 이유를 구조적으로 이해하지 못합니다.

이제 나는 기본이 가상일 때 기본 소멸자 대신 파생된 소멸자를 정의하여 파생물을 대체한다는 것을 이해합니다. 그러나 이 예제에서는 기본 소멸자를 호출해서는 안 됩니다.

정리된 대로 따라잡지 않고 있는 것이 분명합니다. MQL5의 가상 기능에는 문제가 없었습니다. 덕분에 여러 면에서 OOP를 정말 좋아합니다. 그리고 모든 것을 이해했다고 생각했습니다. 그리고 여기에 완전한 종료가 있습니다. 손가락으로 설명해주세요.

 
A100 :
나는 조금 포트. 언뜻보기에만 특정합니다. 여기에서 "전문가" 중 한 명이 TOTAL 이상의 파생 클래스 가 유해하다고 썼습니다. 제대로 초기화하는 데 3-4개의 기본 클래스만 있으면 되는 경우가 많습니다. 그런 다음 실제 파생 상품이 시작됩니다.
예를 들어 전문가(내 이해)가 MQL5로 작성하는 방법이 있습니다.
 
fxsaber :

그러나 이 예제에서는 기본 소멸자를 호출해서는 안 됩니다.

파생된 소멸자에 의해 암시적으로 호출됩니다. 이것은 실제로 단순한 가상 기능 과의 차이점입니다.
 
Комбинатор :
파생된 소멸자에 의해 암시적으로 호출됩니다. 이것은 실제로 단순한 가상 기능 과의 차이점입니다.
고맙습니다. 가상 소멸자는 객체가 소멸되는 동안 호출되는 가상 함수일 뿐만 아니라 좀 더 까다로운 개체임이 밝혀졌습니다.
 
fxsaber :
글쎄, 그는 개체를 삭제해야합니다) 이것이 전체 트릭입니다
 
Alexey Kozitsyn :

SymbolInfoTick() 함수로 최신 데이터가 아닌 데이터를 반환하는 중 오류 발생 - 틱 점프. 빌드 1525 x64. 표시기에서 테스트하고 고문을 확인하지 않았습니다.

리얼, 오프닝, 접속 서버 V. 슬픔! 문제에주의하십시오. 또한 응용 프로그램 #1598238(10페이지부터 시작, 게시 날짜: 2017.01.26 09:43)의 문제에 대해서도 마찬가지입니다.

친애하는 개발자 여러분, 티키를 편집해 봅시다! 코드가 제공됩니다. 여기 있습니다. 문제는 아무 것도 찾을 필요가 없습니다. 반응하고 수정하면 됩니다!

OnCalculate를 OnTick으로 바꾸면 오류가 발생하지 않습니다. 문제는 SymbolInfoTick에 있는 것이 아니라 표시기가 간격이 없도록 비뚤게 구성되어 있다는 사실에 있습니다.