"Init() 함수는 섹션에 따로 설정되어 있습니다. private 섹션에 따로 설정하여 클래스를 다시 초기화할 수 있도록 해야 합니다."
가능합니다:
Init() 함수는 클래스가 다시 초기화될 수 있도록 public 섹션에 따로 설정하여 클래스를 다시 초기화할 수 있는 가능성을 제공합니다.
2) "객체배열" 섹션의"클래스 인스턴스(객체)로 배열 만들기" 기능을 사용하는 예를 들어주세요. 안타깝게도 "이것이 무엇에 사용되는지"를 알 수 없습니다.
3) "캡슐화(비공개, 보호, 공개)에 대한 추가 정보" 섹션에서 기본 클래스-> 클래스 자손이 지나가면서 언급되어 있습니다. 아마도 이 데이터(클래스 클래스: 공개 CBase)는 나중에 깨달았기 때문에 섹션의 시작 부분에 설명되어야 할 것입니다.
4) 찾지 못함: 그림 6. "추가" 함수(빨간색 화살표)의 가시성은 클래스가 로드되는 포인터의 유형에 따라 결정됩니다. 이 예제는 부록의 OOP_sDefaultVirtual_1.mq5 파일에서 찾을 수 있습니다.
5) 라이브러리가 무엇인지에 대한 명확한 표시를 찾지 못했습니다. 분명히 함수의 클래스를 저장하는 방법? 즉, 인클루드 파일과 유사하게 인클루드 파일 만 소스로 저장되고 라이브러리는 컴파일 된 dll로 저장됩니까?
이 글에 대해 대단히 감사합니다! 특히 자료를 일관성 있게 설명해 주셔서 만족스러웠습니다.
1. Yes.
2. "객체 배열" 섹션에 예제가 있는데, 실제로 전체 섹션이 설명이 있는 예제입니다.
3. "OOP를 사용하여 프로그램 작동 논리 변경"섹션에서 고려됩니다.
4. "이 예제는 파일의 부록에 있습니다..."라는 문구는 는 파일에 섹션 헤더로 표시된 섹션에 대한 예제가 포함되어 있음을 의미합니다. 그렇다고 해서 예제가 문서에 기술된 모든 내용을 복제한다는 의미는 아닙니다. 이러한 예제는 전혀 존재하지 않을 수도 있으며 모든 것이 문서에 기록되어 있습니다. 그러나 예제가 있으므로 예제를 기초로 삼아 실험해 볼 수 있습니다. 기사가 기본이고 예제는 보조입니다.
이 문서에서 기반 / 복사 한 두 가지 코드 예제가 있습니다. 둘 다 클래스에 대한 포인터 배열을 생성 한 다음 종료시 삭제합니다. 그러나 하나는 메모리 누수와 함께 종료되고 다른 하나는 메모리 누수없이 종료됩니다. 유일한 차이점은 두 번째 예제에는 소멸자의 '경고'가 주석 처리되어 있다는 것입니다. 소멸자의 경고가 제거되면 메모리 누수가 발생합니다. 이것은 매우 이상합니다. 누구든지 설명 할 수 있습니까??? 도와주세요, 이것은 나를 미치게 만들고 있습니다.
이 기사의 코드 예제 끝에 메모리 누수가있는 매우 간단한 코드 예제를 포함 시켰습니다. 다시, 왜???? 이 마지막 코드 예제에는 복잡한 것은 없습니다 ...
이 코드는 메모리 누수 없이 작동합니다:
class CName
{
private:
int m_arg; // 인스턴스에 대한 변수public:
CName(int aArg)
{ // 생성자
m_arg=aArg;
//Alert("Constructor"+IntegerToString(m_arg));
}
~CName()
{ // 파괴자Alert("Destructor "+IntegerToString(m_arg));
}
};
//---
CName *cname[]; // 배열voidOnInit()
{
// 클래스 인스턴스 10개를 로드할 배열을 준비합니다.ArrayResize(cname,10);
for(int i=0;i<10;i++)
{ // 인스턴스 로드
cname[i]=new CName(i);
}
}
//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
for(int i=0;i<10;i++)
{ // 마지막에 메모리에서 모든 인스턴스를 언로드합니다.delete(cname[i]);
}
}
전문가 로그의 메시지, 누수된 메모리가 없다는 점에 유의하세요:
PI 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Destructor 0
세 가지 변형을 모두 확인했습니다. 세 가지 모두 동일합니다. 모두 정상입니다. 아무도 누출을 제공하지 않습니다. 이 예제에서는 배열이 있고 배열의 각 요소에 인스턴스가 있으며 완료되면 모든 객체를 삭제할 때 배열을 가질 수 없습니다. 객체는 자신의 사본을 만들지 않으며, 당신은 무언가를 삭제하는 것을 놓칠 수 없습니다. 객체가 자신의 사본을 만드는 경우 삭제에 어려움을 겪을 수 있으며 무언가를 놓치기가 매우 쉽습니다. 실제로 누출이 있는 변형을 표시합니다.
You have just registered and most likely you have questions such as, "How do I insert a picture to my a message?" "How do I format my MQL5 source code?" "Where are my personal messages kept?" You may have many other questions. In this article, we have prepared some hands-on tips that will help you get accustomed in MQL5.community and take full advantage of its available features.
세 가지 변형을 모두 확인했습니다. 세 가지 모두 동일합니다. 모두 정상입니다. 누수가 없습니다. 이 예제에서는 배열이 있고 배열의 각 요소에 인스턴스가 있으며 완료되면 모든 객체를 삭제할 때 배열을 가질 수 없습니다. 객체는 자신의 사본을 만들지 않으며, 당신은 무언가를 삭제하는 것을 놓칠 수 없습니다. 객체가 자신의 사본을 만드는 경우 삭제에 어려움을 겪을 수 있으며 무언가를 놓치기가 매우 쉽습니다. 실제로 누출이 있는 변형을 표시합니다.
시간을 내어 답변해 주셔서 감사합니다. 제 후속 질문을 보셨는지 잘 모르겠습니다. 이 포럼에 익숙하지 않아서 삭제 된 별도의 댓글에있었습니다. 그러나 이전 버전의 MetaTrader가있는 구형 컴퓨터에서 세 가지 예제를 모두 실행 해 보았습니다. 이전 버전에서는 3 개 모두 잘 작동하는 것 같았습니다. 전문가 로그 '메모리 누수'오류가 발생하지 않았으며 560 빌드 인 것 같습니다.빌드 560이었던 것 같은데 기억이 나지 않아서 560을 새로운 756 빌드로 업그레이드했습니다. 새 빌드 이후 동일한 메모리 누수 문제가 발생했습니다. 이전 빌드는 기능이 아니기 때문에 메모리 누수 문제를 보고하지 않았을 가능성이 있습니까? 어떤 빌드를 사용하고 있습니까? 다시 한번 감사드립니다.
1) 여기에 오류가 있다고 생각했습니다:
섹션: 생성자에 매개변수 전달하기"Init() 함수는 섹션에 따로 설정되어 있습니다. private 섹션에 따로 설정하여 클래스를 다시 초기화할 수 있도록 해야 합니다."
가능합니다:
Init() 함수는 클래스가 다시 초기화될 수 있도록 public 섹션에 따로 설정하여 클래스를 다시 초기화할 수 있는 가능성을 제공합니다.
2) "객체배열" 섹션의"클래스 인스턴스(객체)로 배열 만들기" 기능을 사용하는 예를 들어주세요. 안타깝게도 "이것이 무엇에 사용되는지"를 알 수 없습니다.
3) "캡슐화(비공개, 보호, 공개)에 대한 추가 정보" 섹션에서 기본 클래스-> 클래스 자손이 지나가면서 언급되어 있습니다. 아마도 이 데이터(클래스 클래스: 공개 CBase)는 나중에 깨달았기 때문에 섹션의 시작 부분에 설명되어야 할 것입니다.
4) 찾지 못함: 그림 6. "추가" 함수(빨간색 화살표)의 가시성은 클래스가 로드되는 포인터의 유형에 따라 결정됩니다. 이 예제는 부록의 OOP_sDefaultVirtual_1.mq5 파일에서 찾을 수 있습니다.
5) 라이브러리가 무엇인지에 대한 명확한 표시를 찾지 못했습니다. 분명히 함수의 클래스를 저장하는 방법? 즉, 인클루드 파일과 유사하게 인클루드 파일 만 소스로 저장되고 라이브러리는 컴파일 된 dll로 저장됩니까?
이 글에 대해 대단히 감사합니다! 특히 자료를 일관성 있게 설명해 주셔서 만족스러웠습니다.
1) 여기에 오류가 있다고 생각했습니다:
섹션: 생성자에 매개변수 전달하기"Init() 함수는 섹션에 따로 설정되어 있습니다. private 섹션에 따로 설정하여 클래스를 다시 초기화할 수 있도록 해야 합니다."
가능합니다:
Init() 함수는 클래스가 다시 초기화될 수 있도록 public 섹션에 따로 설정하여 클래스를 다시 초기화할 수 있는 가능성을 제공합니다.
2) "객체배열" 섹션의"클래스 인스턴스(객체)로 배열 만들기" 기능을 사용하는 예를 들어주세요. 안타깝게도 "이것이 무엇에 사용되는지"를 알 수 없습니다.
3) "캡슐화(비공개, 보호, 공개)에 대한 추가 정보" 섹션에서 기본 클래스-> 클래스 자손이 지나가면서 언급되어 있습니다. 아마도 이 데이터(클래스 클래스: 공개 CBase)는 나중에 깨달았기 때문에 섹션의 시작 부분에 설명되어야 할 것입니다.
4) 찾지 못함: 그림 6. "추가" 함수(빨간색 화살표)의 가시성은 클래스가 로드되는 포인터의 유형에 따라 결정됩니다. 이 예제는 부록의 OOP_sDefaultVirtual_1.mq5 파일에서 찾을 수 있습니다.
5) 라이브러리가 무엇인지에 대한 명확한 표시를 찾지 못했습니다. 분명히 함수의 클래스를 저장하는 방법? 즉, 인클루드 파일과 유사하게 인클루드 파일 만 소스로 저장되고 라이브러리는 컴파일 된 dll로 저장됩니까?
이 글에 대해 대단히 감사합니다! 특히 자료를 일관성 있게 설명해 주셔서 만족스러웠습니다.
1. Yes.
2. "객체 배열" 섹션에 예제가 있는데, 실제로 전체 섹션이 설명이 있는 예제입니다.
3. "OOP를 사용하여 프로그램 작동 논리 변경"섹션에서 고려됩니다.
4. "이 예제는 파일의 부록에 있습니다..."라는 문구는 는 파일에 섹션 헤더로 표시된 섹션에 대한 예제가 포함되어 있음을 의미합니다. 그렇다고 해서 예제가 문서에 기술된 모든 내용을 복제한다는 의미는 아닙니다. 이러한 예제는 전혀 존재하지 않을 수도 있으며 모든 것이 문서에 기록되어 있습니다. 그러나 예제가 있으므로 예제를 기초로 삼아 실험해 볼 수 있습니다. 기사가 기본이고 예제는 보조입니다.
5. Уже давно указано: http://ru.wikipedia.org/wiki/%C1%E8%E1%EB%E8%EE%F2%E5%EA%E0_(%EF%F0%EE%E3%F0%E0%EC%EC%E8%F0%EE%E2%E0%ED%E8%E5)
유능한 "접근 가능한" 언어로 작성된 매우 흥미로운 기사입니다.
저자에게 감사드립니다.
이 문서에서 기반 / 복사 한 두 가지 코드 예제가 있습니다. 둘 다 클래스에 대한 포인터 배열을 생성 한 다음 종료시 삭제합니다. 그러나 하나는 메모리 누수와 함께 종료되고 다른 하나는 메모리 누수없이 종료됩니다. 유일한 차이점은 두 번째 예제에는 소멸자의 '경고'가 주석 처리되어 있다는 것입니다. 소멸자의 경고가 제거되면 메모리 누수가 발생합니다. 이것은 매우 이상합니다. 누구든지 설명 할 수 있습니까??? 도와주세요, 이것은 나를 미치게 만들고 있습니다.
이 기사의 코드 예제 끝에 메모리 누수가있는 매우 간단한 코드 예제를 포함 시켰습니다. 다시, 왜???? 이 마지막 코드 예제에는 복잡한 것은 없습니다 ...
이 코드는 메모리 누수 없이 작동합니다:
전문가 로그의 메시지, 누수된 메모리가 없다는 점에 유의하세요:
PI 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Destructor 0
KP 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Destructor 1
JG 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Destructor 2
EN 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Destructor 3
LF 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Destructor 4
OM 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Destructor 5
FD 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Destructor 6
IK 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Destructor 7
HS 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Destructor 8
CJ 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Destructor 9
이 코드는 메모리 누출과 함께 종료됩니다!!!! 왜????????? 유일한 차이점은 소멸자에서 '경고'를 주석 처리하는 것입니다...
전문가 로그의 메시지, 메모리가 유출되었음을 기록합니다:
FM 1 OOP_sConstDestr_2 (EURUSD,M1) 13:51:19 삭제되지 않은 객체 10개가 남았습니다.
EG 1 OOP_sConstDestr_2 (EURUSD,M1) 13:51:19 CName 유형의 개체 10개가 남았습니다.
GO 1 OOP_sConstDestr_2 (EURUSD,M1) 13:51:19 200바이트의 메모리 누수
마지막 예제, 매우 간단하지만 메모리 누수로 종료되는 내 코드....
전문가 로그의 메시지, 유출된 메모리에 주목하세요:
MR 0 tester (EURUSD,M1) 14:07:23 마지막 오류- 0 현재 시간: 2013.02.06 23:07:23
FL 1 tester (EURUSD,M1) 14:07:23 삭제되지 않은 개체 10개 남음
KN 1 테스터 (EURUSD,M1) 14:07:23 CCandleStick 유형 10 개 남음
JS 1 tester (EURUSD,M1) 14:07:23 160바이트의 메모리 누수
두 가지 예가 있습니다...
세 가지 변형을 모두 확인했습니다. 세 가지 모두 동일합니다. 모두 정상입니다. 아무도 누출을 제공하지 않습니다. 이 예제에서는 배열이 있고 배열의 각 요소에 인스턴스가 있으며 완료되면 모든 객체를 삭제할 때 배열을 가질 수 없습니다. 객체는 자신의 사본을 만들지 않으며, 당신은 무언가를 삭제하는 것을 놓칠 수 없습니다. 객체가 자신의 사본을 만드는 경우 삭제에 어려움을 겪을 수 있으며 무언가를 놓치기가 매우 쉽습니다. 실제로 누출이 있는 변형을 표시합니다.
SRC 버튼을 사용하여 코드를 삽입하십시오 (더 나은 - 파일 첨부).
내 영어에 대해 죄송합니다 :)
세 가지 변형을 모두 확인했습니다. 세 가지 모두 동일합니다. 모두 정상입니다. 누수가 없습니다. 이 예제에서는 배열이 있고 배열의 각 요소에 인스턴스가 있으며 완료되면 모든 객체를 삭제할 때 배열을 가질 수 없습니다. 객체는 자신의 사본을 만들지 않으며, 당신은 무언가를 삭제하는 것을 놓칠 수 없습니다. 객체가 자신의 사본을 만드는 경우 삭제에 어려움을 겪을 수 있으며 무언가를 놓치기가 매우 쉽습니다. 실제로 누출이 있는 변형을 표시합니다.
SRC 버튼을 사용하여 코드를 삽입하십시오 (더 나은 - 파일 첨부).
내 영어에 대해 죄송합니다 :)
시간을 내어 답변해 주셔서 감사합니다. 제 후속 질문을 보셨는지 잘 모르겠습니다. 이 포럼에 익숙하지 않아서 삭제 된 별도의 댓글에있었습니다. 그러나 이전 버전의 MetaTrader가있는 구형 컴퓨터에서 세 가지 예제를 모두 실행 해 보았습니다. 이전 버전에서는 3 개 모두 잘 작동하는 것 같았습니다. 전문가 로그 '메모리 누수'오류가 발생하지 않았으며 560 빌드 인 것 같습니다.빌드 560이었던 것 같은데 기억이 나지 않아서 560을 새로운 756 빌드로 업그레이드했습니다. 새 빌드 이후 동일한 메모리 누수 문제가 발생했습니다. 이전 빌드는 기능이 아니기 때문에 메모리 누수 문제를 보고하지 않았을 가능성이 있습니까? 어떤 빌드를 사용하고 있습니까? 다시 한번 감사드립니다.