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

 
Nikolai Semko :

감사합니다. 하지만 거기에서 내 질문에 대한 답변을 보지 못했습니다.
A *a= new A일 때 소멸자가 호출되지 않는 이유를 이해할 수 없습니다.

https://www.mql5.com/ru/docs/basis/variables/object_live

object_pointer = new Class_Name 표현식으로 생성된 모든 객체는 이후에 delete( object_pointer ) 연산자에 의해 파괴되어야 합니다 . 어떤 이유로 이러한 변수가 프로그램 종료 시 삭제 연산자에 의해 파괴되지 않은 경우 이에 대한 메시지가 "전문가" 로그에 표시됩니다. 여러 변수를 선언하고 모든 변수에 단일 개체 포인터를 할당할 수 있습니다.

Документация по MQL5: Основы языка / Переменные / Создание и уничтожение объектов
Документация по MQL5: Основы языка / Переменные / Создание и уничтожение объектов
  • www.mql5.com
После загрузки на исполнение mql5-программы каждой переменной выделяется память в соответствие с типом переменной. Переменные делятся на два типа по уровню доступа - глобальные переменные и локальные переменные, и по классам памяти: входные параметры mql5-программы, статические и автоматические. Каждая переменная при необходимости...
 

MQL에 OnTimer() 함수 를 확인하도록 요청합니다.

어떤 이유에서인지 MT4용 전략 테스터에서는 작동하지 않지만(오류가 없고 이 기능 내부에서 아무 것도 실행되지 않음) 온라인에서는 모든 것이 정상입니다.

MT5의 경우 이 기능은 테스터와 온라인 모두에서 작동합니다.

고맙습니다!

 
Incorrect-Init에 많은 시간이 소요됩니다.
Core 1   pass 114 tested with error "incorrect input parameters" in 0 : 00 : 00.218

OnInit에서는 두 개의 숫자만 비교되며 Incorrect 패스는 전체 패스보다 시간이 더 걸립니다! 어때요?


이러한 어드바이저와 같은 완전한 최적화를 위해 출시합니다.

 input int Range = 0 ; // задать Оптимизацию 1 .. 10000

int OnInit () { return ( INIT_PARAMETERS_INCORRECT ); }


우리는 8명의 에이전트의 작업 결과를 얻습니다.

Tester  optimization finished, total passes 10000
Statistics      optimization done in 2 minutes 24 seconds


이제 그런 조언자

 input int Range = 0 ; // задать Оптимизацию 1 .. 10000

void OnInit () {}
Tester  optimization finished, total passes 10000
Statistics      optimization done in 0 minutes 31 seconds


마지막으로 그러한

 input int Range = 0 ; // задать Оптимизацию 1 .. 10000

void OnInit () { ExpertRemove (); }
Tester  optimization finished, total passes 10000
Statistics      optimization done in 2 minutes 19 seconds


두 가지 결론

  1. Incorrect-Init와 ExpertRemove 는 속도면에서 동일합니다.
  2. 빈 실행은 OnInit를 떠나는 것보다 ~5배 빠릅니다.


두 번째 요점은 분명히 실수입니다. OnInit에서 뛰어 내리는 것보다 제 시간에 빈 실행을 수행하는 것이 더 유리합니다. 때문에 수정하십시오. Incorrect-Init 및 ExpertRemove의 장점은 거의 완전히 상실되었습니다.

 

조언자/지표/스크립트 및 계정이 있는 즐겨찾기 탭 은 터미널을 종료한 후에만 기억됩니다. 이 때문에 비정상 출력(정전)이 발생하면 이 탭을 재설정합니다. 변경시 저장이 가능한가요?

때로는 즐겨찾기에 폴더를 추가할 수 있다면 매우 편리할 것이라는 분명한 이해가 있습니다.

 
A100 :
그런 다음 다음과 같이 시도하십시오.

결과:

1:POINTER_AUTOMATIC
1:POINTER_DYNAMIC
2:POINTER_DYNAMIC
2:POINTER_AUTOMATIC

고맙습니다! 꽤 해결책입니다.

컴파일러가 맹세하지 않는 유일한 방법은 아마도 더 나을 것입니다.

 class B  { public :
                     B( void *b) {d=b;}
                    ~B() { delete d; }
   void              *d; };

글쎄, 그것은 밝혀졌습니다 - 버그 또는 무엇입니까?
new 를 통해 클래스의 인스턴스를 생성할 때 소멸자를 호출하지 않습니다.

그리고 소멸자를 호출하는 특수 클래스를 만드는 유일한 솔루션은 무엇입니까? 아니면 그것 없이도 여전히 가능합니까?

 
Andrey Barinov :

new 연산자로 생성하고 delete 연산자로 삭제

문제는 소멸자에 삭제 를 넣는 것이지만 new (A *a= new A;)를 통해 클래스의 인스턴스를 만들 때 소멸자가 호출되지 않습니다.

 
aleger :

가능하다면 지그재그 표시기에서 고가 및 저가 극단값의 해당 값을 표시하는 방법은 무엇입니까?

형성된 봉우리와 저지대에 안정적인 결합과 근접성을 제공합니까?

OBJ_TEXT 의 예를 참조하십시오.

 

고맙습니다.
예, 이것이 바로 여기에 쓰여진 내용입니다.

Все объекты, созданные выражением указатель_объекта= new Имя_Класса, обязательно должны быть впоследствии уничтожены оператором delete (указатель_объекта). 
Если по каким то причинам такая переменная по окончании работы программы не была уничтожена оператором delete , то об этом будет выведено сообщение в журнал "Эксперты" . 
Можно объявить несколько переменных и всем им присвоить указатель одного объекта.
Если динамически создаваемый объект имеет конструктор, то этот конструктор будет вызван в момент выполнения оператора new . Если объект имеет деструктор, 
то деструктор будет вызван в момент выполнения оператора delete .

버그가 아니라 그런 기능을 의미하며 악순환을 일으키게 됩니다.
동적 객체를 삭제하는 프로세스를 자동화하고 싶다면 소멸자가 delete 시에만 호출되므로 소멸자 자체에 삭제 를 넣는 것은 쓸모가 없습니다.
그러나 @A100here 제안한 것처럼 다른 클래스의 다른 인스턴스를 통해 자동화를 구현할 수 있습니다.

 
aleger :

팁 고마워. 이미 zamayalsya는 읽고 시도하고 시도하고 읽으십시오. ZigZag로 작업 예제를 보고 싶습니다...

예를 들어 지그재그로 내 아바타에 있지만 상위 극단의 올바른 바인딩과 함께 모든 것이 하위 극단의 바인딩과 함께 순서대로 있기 때문에!

k=(WindowPriceMax()-WindowPriceMin())/30을 통해 바인딩하는 방법은 창 크기가 크게 변경되어 자체적으로 정당화되지 않으며 다른 것이 필요합니다...


예에서   OBJ_TEXT 및 상단 및 하단 앵커. 링크를 따라 예제를 실행...

 
Nikolai Semko :

버그가 아니라 그런 기능을 의미하며 악순환을 일으키게 됩니다.

할당된 관리되지 않는 리소스에 대한 제어를 해결하는 방법은 스마트 포인터를 사용하는 것이라고 이전에 이미 들었습니다. C++와 완전한 유추.
아마도 문제는 솔루션이 은색 접시에 제시되지 않았다는 것입니다. 글쎄요, 죄송합니다 ...


누구나 "shared_ptr" 사이트 검색에서 점수를 매길 수 있고 첫 번째 결과로 이동할 수 있습니다. 어렵지 않습니다. 시도해 볼 것을 강력히 권장합니다.