Hatalar, hatalar, sorular - sayfa 1874 1...186718681869187018711872187318741875187618771878187918801881...3184 Yeni yorum fxsaber 2017.04.25 08:19 #18731 Koldun Zloy : Yapıcının özel olması gerektiğinden eminseniz, başka yolu yoktur. Akıllı işaretçi, basit bir işaretçi içeren ve zamanında silinmesini sağlayan bir nesnedir. Bu en kolay seçenektir. Daha karmaşık akıllı işaretçiler de vardır. Bu kitapta onlar hakkında çok iyi yazılmış: https://rsdn.org/res/book/cpp/cpp_real_programmers.xml Teşekkür ederim! Çeşitli seçenekler denedim ama işe yaramıyor. 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 () { } Aslında, çalışmaması mantıklı. Bir akıllı işaretçi yıkıcısını sınıf yıkıcısından önce çağrılmaya zorlayamazsınız. fxsaber 2017.04.25 09:05 #18732 Derleyici, hatayı ve oluştuğu yeri belirtmek yerine tanımsız bir dahili hata #112 verir. class CLASS {}; template < typename T> class CLASS2 { public : static void Func() {} }; void OnStart () { CLASS2<CLASS>::Func; } [Silindi] 2017.04.25 09:22 #18733 fxsaber : Teşekkür ederim! Çeşitli seçenekler denedim ama işe yaramıyor. Aslında, çalışmaması mantıklı. Bir akıllı işaretçi yıkıcısını sınıf yıkıcısından önce çağrılmaya zorlayamazsınız. Şu şekilde deneyin: 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 () { } Ne yaptığınızı bilmiyorum, ancak MQL'de bir kurucuyu private yapmak yalnızca bir singleton için anlamlıdır. fxsaber 2017.04.25 09:53 #18734 Koldun Zloy : Şu şekilde deneyin: Ayrıntılı örnek için teşekkürler! Ne yazık ki, yapıcı onun içinde özel değil. Kapalıyken tabii ki böyle çalışmıyor. Benim için gerekli, herkesten gizlenmiş bir nesne vardı. Aynı zamanda, bu türden başka bir nesne hiçbir şekilde oluşturulamadı. traktör F dll nasıl kaldırılır EURUSD - Eğilimler, Tahminler fxsaber 2017.04.25 10:12 #18735 Bu durumda doğru mu? 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; } yürütme günlüğüne çıktı mı? void CLASS::~CLASS() void CLASS::~CLASS() delete invalid pointer Ve bir yapıcı/yıkıcının __FUNCSIG__ öğesinin bir void türü ürettiği doğru mu? fxsaber 2017.04.25 10:34 #18736 Koldun Zloy : Şu şekilde deneyin: Akıllı işaretçi yıkıcı neden sizin sürümünüzdeki sınıf yıkıcısından önce çağrılıyor ve benimkinde tam tersi (kurucu herkese açık olsa bile)? [Silindi] 2017.04.25 11:06 #18737 fxsaber : Benim için gerekli, herkesten gizlenmiş bir nesne vardı. Aynı zamanda, bu türden başka bir nesne hiçbir şekilde oluşturulamadı. Buna " Singleton " denir. Neden sana yakışmadığını söylüyorsun? İşte bir singleton örneği. 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(); } [Silindi] 2017.04.25 11:07 #18738 fxsaber : Bu durumda doğru mu? yürütme günlüğüne çıktı mı? Ve bir yapıcı/yıkıcının __FUNCSIG__ öğesinin bir void türü ürettiği doğru mu? Asla yapma delete & this ; Sergey Dzyublik 2017.04.25 11:23 #18739 fxsaber : Bu durumda bunu yürütme günlüğünde yayınlamak doğru mu? Ve bir yapıcı/yıkıcının __FUNCSIG__ öğesinin bir void türü ürettiği doğru mu? Evet evet. fxsaber 2017.04.25 11:32 #18740 Koldun Zloy : Buna " Singleton " denir. Neden sana yakışmadığını söylüyorsun? İşte bir singleton örneği. Çok teşekkürler, işe yarıyor! 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 () { } Ama bir sır olarak kalıyor Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum Hatalar, hatalar, sorular fxsaber , 2017.04.25 10:34 Akıllı işaretçi yıkıcı neden sizin sürümünüzdeki sınıf yıkıcısından önce çağrılıyor ve benimkinde tam tersi (kurucu herkese açık olsa bile)? Mql5 dilinin özellikleri, incelikleri MQL5'te OOP hakkında sorular MQL4 ve MQL5 ile 1...186718681869187018711872187318741875187618771878187918801881...3184 Yeni yorum
Yapıcının özel olması gerektiğinden eminseniz, başka yolu yoktur.
Akıllı işaretçi, basit bir işaretçi içeren ve zamanında silinmesini sağlayan bir nesnedir.
Bu en kolay seçenektir.
Daha karmaşık akıllı işaretçiler de vardır.
Bu kitapta onlar hakkında çok iyi yazılmış: https://rsdn.org/res/book/cpp/cpp_real_programmers.xml
Aslında, çalışmaması mantıklı. Bir akıllı işaretçi yıkıcısını sınıf yıkıcısından önce çağrılmaya zorlayamazsınız.
Derleyici, hatayı ve oluştuğu yeri belirtmek yerine tanımsız bir dahili hata #112 verir.
Teşekkür ederim! Çeşitli seçenekler denedim ama işe yaramıyor.
Aslında, çalışmaması mantıklı. Bir akıllı işaretçi yıkıcısını sınıf yıkıcısından önce çağrılmaya zorlayamazsınız.
Şu şekilde deneyin:
Ne yaptığınızı bilmiyorum, ancak MQL'de bir kurucuyu private yapmak yalnızca bir singleton için anlamlıdır.
Şu şekilde deneyin:
Ayrıntılı örnek için teşekkürler! Ne yazık ki, yapıcı onun içinde özel değil. Kapalıyken tabii ki böyle çalışmıyor.
Benim için gerekli, herkesten gizlenmiş bir nesne vardı. Aynı zamanda, bu türden başka bir nesne hiçbir şekilde oluşturulamadı.
yürütme günlüğüne çıktı mı?
Ve bir yapıcı/yıkıcının __FUNCSIG__ öğesinin bir void türü ürettiği doğru mu?
Şu şekilde deneyin:
Benim için gerekli, herkesten gizlenmiş bir nesne vardı. Aynı zamanda, bu türden başka bir nesne hiçbir şekilde oluşturulamadı.
Buna " Singleton " denir.
Neden sana yakışmadığını söylüyorsun?
İşte bir singleton örneği.
Bu durumda doğru mu?
yürütme günlüğüne çıktı mı?
Ve bir yapıcı/yıkıcının __FUNCSIG__ öğesinin bir void türü ürettiği doğru mu?
Asla yapma
Bu durumda bunu yürütme günlüğünde yayınlamak doğru mu?
Ve bir yapıcı/yıkıcının __FUNCSIG__ öğesinin bir void türü ürettiği doğru mu?
Evet evet.
Buna " Singleton " denir.
Neden sana yakışmadığını söylüyorsun?
İşte bir singleton örneği.
Çok teşekkürler, işe yarıyor!
Ama bir sır olarak kalıyor
Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum
Hatalar, hatalar, sorular
fxsaber , 2017.04.25 10:34
Akıllı işaretçi yıkıcı neden sizin sürümünüzdeki sınıf yıkıcısından önce çağrılıyor ve benimkinde tam tersi (kurucu herkese açık olsa bile)?