오류, 버그, 질문 - 페이지 1874 1...186718681869187018711872187318741875187618771878187918801881...3184 새 코멘트 fxsaber 2017.04.25 06:19 #18731 Koldun Zloy : 생성자가 private이어야 한다고 확신한다면 다른 방법은 없습니다. 스마트 포인터는 간단한 포인터를 포함하고 적시에 삭제되도록 하는 개체입니다. 이것은 가장 쉬운 옵션입니다. 더 복잡한 스마트 포인터도 있습니다. https://rsdn.org/res/book/cpp/cpp_real_programmers.xml에서 이에 대해 잘 설명되어 있습니다. 고맙습니다! 다양한 옵션을 시도했지만 작동하지 않습니다. template < typename T> struct PTR { T* Ptr; PTR( void ) { } void operator =( T* &Value ) { this .Ptr = Value; } ~PTR( void ) { Print ( __FUNCSIG__ ); delete this .Ptr; } }; class CLASS { private : static CLASS* Tmp; static PTR<CLASS> Ptr; CLASS() { CLASS::Ptr = CLASS::Tmp; } }; static CLASS* CLASS::Tmp = new CLASS; static PTR<CLASS> CLASS::Ptr; void OnStart () { } 사실 안되는게 당연합니다. 스마트 포인터 소멸자가 클래스 소멸자 보다 먼저 호출되도록 할 수 없습니다. fxsaber 2017.04.25 07:05 #18732 컴파일러는 오류와 발생 위치를 지정하는 대신 정의되지 않은 내부 오류 #112 를 발생시킵니다. class CLASS {}; template < typename T> class CLASS2 { public : static void Func() {} }; void OnStart () { CLASS2<CLASS>::Func; } Koldun Zloy 2017.04.25 07:22 #18733 fxsaber : 고맙습니다! 다양한 옵션을 시도했지만 작동하지 않습니다 사실 안되는게 당연합니다. 스마트 포인터 소멸자가 클래스 소멸자 보다 먼저 호출되도록 할 수 없습니다. 다음과 같이 시도하십시오. template < typename T > struct PTR { T* Ptr; PTR( T* Value ) : Ptr( Value ) { } ~PTR() { Print ( __FUNCSIG__ ); delete Ptr; } }; class CLASS { private : static PTR< CLASS > Ptr; public : CLASS() { Print ( __FUNCSIG__ ); } ~CLASS() { Print ( __FUNCSIG__ ); } }; static PTR< CLASS > CLASS::Ptr( new CLASS ); void OnStart () { } 나는 당신이 무엇을하고 있는지 모르지만 MQL에서 생성자를 비공개로 만드는 것은 싱글 톤에 대해서만 의미가 있습니다. fxsaber 2017.04.25 07:53 #18734 Koldun Zloy : 다음과 같이 시도하십시오. 자세한 예시 감사합니다! 불행히도 생성자는 private가 아닙니다. 물론 닫힌 상태에서는 그렇게 작동하지 않습니다. 나에게 필요한 것은 모든 사람에게 숨겨진 대상이 있다는 것입니다. 동시에 이 유형의 다른 개체는 어떤 식으로든 생성할 수 없습니다. fxsaber 2017.04.25 08:12 #18735 이 경우 맞습니까? class CLASS { public : ~CLASS() { static bool FirstRun = true ; if (FirstRun && CheckPointer (& this ) == POINTER_DYNAMIC ) { FirstRun = false ; delete & this ; } Print ( __FUNCSIG__ ); } }; void OnStart () { CLASS* Class = new CLASS; delete Class; } 실행 로그에 출력하시겠습니까? void CLASS::~CLASS() void CLASS::~CLASS() delete invalid pointer 그리고 생성자/소멸자의 __FUNCSIG__가 void 유형을 생성하는 것이 맞습니까? fxsaber 2017.04.25 08:34 #18736 Koldun Zloy : 다음과 같이 시도하십시오. 스마트 포인터 소멸자가 귀하의 버전에서는 클래스 소멸자 보다 먼저 호출되고, 제 버전에서는 그 반대의 경우도 마찬가지입니다(생성자가 공용인 경우에도)? Koldun Zloy 2017.04.25 09:06 #18737 fxsaber : 나에게 필요한 것은 모든 사람에게 숨겨진 대상이 있다는 것입니다. 동시에 이 유형의 다른 개체는 어떤 식으로든 생성할 수 없습니다. 이것을 " 싱글톤 "이라고 합니다. 왜 어울리지 않는다고 합니까? 다음은 싱글톤의 예입니다. template < typename T > struct PTR { T* Ptr; PTR() : Ptr( NULL ){} PTR( T* ptr ) : Ptr( ptr ) { } ~PTR() { Print ( __FUNCSIG__ ); if ( Ptr ) delete Ptr; } void Set( T* ptr ) { Ptr = ptr; } }; class CLASS { static PTR< CLASS > sPtr; CLASS() { Print ( __FUNCSIG__ ); } public : ~CLASS() { Print ( __FUNCSIG__ ); } static CLASS* GetPtr() { if ( !sPtr.Ptr ){ sPtr.Set( new CLASS ); } return sPtr.Ptr; } }; static PTR< CLASS > CLASS::sPtr; void OnStart () { CLASS* ptr = CLASS::GetPtr(); } Koldun Zloy 2017.04.25 09:07 #18738 fxsaber : 이 경우 맞습니까? 실행 로그에 출력하시겠습니까? 그리고 생성자/소멸자의 __FUNCSIG__가 void 유형을 생성하는 것이 맞습니까? 절대하지 않아 delete & this ; Sergey Dzyublik 2017.04.25 09:23 #18739 fxsaber : 이 경우 실행 로그에 이것을 발행하는 것이 맞습니까? 그리고 생성자/소멸자의 __FUNCSIG__가 void 유형을 생성하는 것이 맞습니까? 예 예. fxsaber 2017.04.25 09:32 #18740 Koldun Zloy : 이것을 " 싱글톤 "이라고 합니다. 왜 어울리지 않는다고 합니까? 다음은 싱글톤의 예입니다. 감사합니다. 작동합니다! template < typename T > struct PTR { T* Ptr; PTR( void ) : Ptr( NULL ) { } PTR( T* ptr ) : Ptr(ptr) { } ~PTR( void ) { if ( this .Ptr) delete this .Ptr; } bool Set( T* ptr ) { this .Ptr = ptr; return ( true ); } void operator =( bool ) { } }; class CLASS { private : static PTR<CLASS> sPtr; CLASS() { } public : static bool Set() { return (CLASS::sPtr.Ptr ? false : CLASS::sPtr.Set( new CLASS)); } }; static PTR<CLASS> CLASS::sPtr = CLASS::Set(); void OnStart () { } 하지만 그것은 미스터리로 남아있다. 거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼 오류, 버그, 질문 fxsaber , 2017.04.25 10:34 스마트 포인터 소멸자가 귀하의 버전에서는 클래스 소멸자 보다 먼저 호출되고, 제 버전에서는 그 반대의 경우도 마찬가지입니다(생성자가 공용인 경우에도)? 1...186718681869187018711872187318741875187618771878187918801881...3184 새 코멘트 트레이딩 기회를 놓치고 있어요: 무료 트레이딩 앱 복사용 8,000 이상의 시그널 금융 시장 개척을 위한 경제 뉴스 등록 로그인 공백없는 라틴 문자 비밀번호가 이 이메일로 전송될 것입니다 오류 발생됨 Google으로 로그인 웹사이트 정책 및 이용약관에 동의합니다. 계정이 없으시면, 가입하십시오 MQL5.com 웹사이트에 로그인을 하기 위해 쿠키를 허용하십시오. 브라우저에서 필요한 설정을 활성화하시지 않으면, 로그인할 수 없습니다. 사용자명/비밀번호를 잊으셨습니까? Google으로 로그인
생성자가 private이어야 한다고 확신한다면 다른 방법은 없습니다.
스마트 포인터는 간단한 포인터를 포함하고 적시에 삭제되도록 하는 개체입니다.
이것은 가장 쉬운 옵션입니다.
더 복잡한 스마트 포인터도 있습니다.
https://rsdn.org/res/book/cpp/cpp_real_programmers.xml에서 이에 대해 잘 설명되어 있습니다.
사실 안되는게 당연합니다. 스마트 포인터 소멸자가 클래스 소멸자 보다 먼저 호출되도록 할 수 없습니다.
컴파일러는 오류와 발생 위치를 지정하는 대신 정의되지 않은 내부 오류 #112 를 발생시킵니다.
고맙습니다! 다양한 옵션을 시도했지만 작동하지 않습니다
사실 안되는게 당연합니다. 스마트 포인터 소멸자가 클래스 소멸자 보다 먼저 호출되도록 할 수 없습니다.
다음과 같이 시도하십시오.
나는 당신이 무엇을하고 있는지 모르지만 MQL에서 생성자를 비공개로 만드는 것은 싱글 톤에 대해서만 의미가 있습니다.
다음과 같이 시도하십시오.
자세한 예시 감사합니다! 불행히도 생성자는 private가 아닙니다. 물론 닫힌 상태에서는 그렇게 작동하지 않습니다.
나에게 필요한 것은 모든 사람에게 숨겨진 대상이 있다는 것입니다. 동시에 이 유형의 다른 개체는 어떤 식으로든 생성할 수 없습니다.
실행 로그에 출력하시겠습니까?
그리고 생성자/소멸자의 __FUNCSIG__가 void 유형을 생성하는 것이 맞습니까?
다음과 같이 시도하십시오.
나에게 필요한 것은 모든 사람에게 숨겨진 대상이 있다는 것입니다. 동시에 이 유형의 다른 개체는 어떤 식으로든 생성할 수 없습니다.
이것을 " 싱글톤 "이라고 합니다.
왜 어울리지 않는다고 합니까?
다음은 싱글톤의 예입니다.
이 경우 맞습니까?
실행 로그에 출력하시겠습니까?
그리고 생성자/소멸자의 __FUNCSIG__가 void 유형을 생성하는 것이 맞습니까?
절대하지 않아
이 경우 실행 로그에 이것을 발행하는 것이 맞습니까?
그리고 생성자/소멸자의 __FUNCSIG__가 void 유형을 생성하는 것이 맞습니까?
예 예.
이것을 " 싱글톤 "이라고 합니다.
왜 어울리지 않는다고 합니까?
다음은 싱글톤의 예입니다.
감사합니다. 작동합니다!
하지만 그것은 미스터리로 남아있다.
거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼
오류, 버그, 질문
fxsaber , 2017.04.25 10:34
스마트 포인터 소멸자가 귀하의 버전에서는 클래스 소멸자 보다 먼저 호출되고, 제 버전에서는 그 반대의 경우도 마찬가지입니다(생성자가 공용인 경우에도)?