Hatalar, hatalar, sorular - sayfa 1785

 
fxsaber :
Bir yıkıcının ne için olduğunu biliyorum. Neden sanal kelimesini tanımından önce reçete ettiğimi anlayamadım?
Yıkıcılar orada farklı olduğundan, C++ ile kod uyumluluğu için postscript'e ihtiyacım var
 
A100 :
Yıkıcılar orada farklı olduğundan, C++ ile kod uyumluluğu için postscript'e ihtiyacım var
Anladım teşekkürler. MQL5'e çok şey aktarıyor musunuz? - neden böyle özel örnekler?
 
fxsaber :
Bir yıkıcının ne için olduğunu biliyorum. Neden sanal kelimesini tanımından önce reçete ettiğimi anlayamadım?

Sanal fonksiyonlar ve yıkıcı >>>

Ana kural: sınıfınızda en az bir sanal işlev varsa, yıkıcı da sanal yapılmalıdır. Aynı zamanda varsayılan yıkıcının sanal olmayacağını da unutmamalıyız, bu yüzden açıkça beyan etmelisiniz. Bunu yapmazsanız, programınızda neredeyse kesinlikle bellek sızıntıları olacaktır. Nedenini anlamak için yine çok fazla zihne gerek yok. Birkaç örneğe bakalım.

 
fxsaber :
Anladım teşekkürler. MQL5'e çok şey aktarıyor musunuz? - neden böyle özel örnekler?
biraz takıyorum. Sadece ilk bakışta spesifik. Burada "uzmanlardan" biri, TOTAL'ın 3'ten fazla türetilmiş sınıfın zararlı olduğunu yazdı. Düzgün bir şekilde başlatmam genellikle sadece 3-4 temel sınıf alır ve ancak o zaman gerçek türevler başlar
 
int main()
{
    A * pA = new B;
     delete pA;
     return EXIT_SUCCESS;
}

Bu sefer nesne olması gerektiği gibi oluşturulur ve yok edildiğinde türetilmiş sınıfın yıkıcısı çağrılmadığı için bir bellek sızıntısı oluşur.

Bunun nedeni, silme işleminin temel sınıfa bir işaretçi aracılığıyla yapılması ve derleyicinin yıkıcıyı çağırmak için erken bağlama kullanmasıdır. Temel sınıfın yıkıcısı, türetilmiş sınıfın yıkıcısını çağıramaz çünkü onun hakkında hiçbir şey bilmiyor. Sonuç olarak, türetilmiş sınıf için ayrılan belleğin bir kısmı geri alınamaz bir şekilde kaybolur.

Bunu önlemek için, temel sınıftaki yıkıcının sanal olarak bildirilmesi gerekir.

Temel yıkıcıyı sanal yaparak, türetilmiş yıkıcıyla ilgili bilgilerin neden ortaya çıktığını mimari olarak anlamıyorum.

Şimdi anlıyorum ki, taban sanal olduğunda, o zaman taban yıkıcı yerine türetilmiş bir yıkıcı tanımlayarak, bir türev için bir değiştirme yaparız. Ancak bu örnekte temel yıkıcı çağrılmamalıdır.

Düzenlendiği için yetişemediğim açık. MQL5'te sanal işlevlerle ilgili hiçbir zaman sorun olmadı. Onlar sayesinde, birçok yönden OOP'yi gerçekten seviyorum. Ve her şeyi anladığımı sanıyordum. Ve işte tam bir kapatma. Lütfen parmaklarınızla açıklayın.

 
A100 :
biraz takıyorum. Sadece ilk bakışta spesifik. Burada "uzmanlardan" biri, TOTAL'ın 3'ten fazla türetilmiş sınıfın zararlı olduğunu yazdı. Düzgün bir şekilde başlatmam genellikle sadece 3-4 temel sınıf alır ve ancak o zaman gerçek türevler başlar
Bir örnek, profesyonellerin (anladığım kadarıyla) MQL5'te nasıl yazdığı olabilir.
 
fxsaber :

Ancak bu örnekte temel yıkıcı çağrılmamalıdır.

Türetilmiş yıkıcı tarafından örtük olarak çağrılır. Bu aslında basit sanal işlevlerden farkıdır.
 
Комбинатор :
Türetilmiş yıkıcı tarafından örtük olarak çağrılır. Bu aslında basit sanal işlevlerden farkıdır.
Teşekkür ederim. Sanal yıkıcının yalnızca nesnenin yok edilmesi sırasında çağrılan sanal bir işlev olmadığı, aynı zamanda daha zor bir varlık olduğu ortaya çıktı.
 
fxsaber :
Şey, nesneyi silmeli) bütün hile bu
 
Alexey Kozitsyn :

SymbolInfoTick() işlevi tarafından güncel olmayan veriler döndürülürken hata - kene atlama. 1525 x64 oluşturun. Göstergeden test edin, danışmanı kontrol etmedi:

Gerçek, Açılış, Erişim Sunucusu V. Hüzün! Lütfen soruna dikkat edin. Ayrıca #1598238 numaralı başvurudaki sorun için de (10. sayfadan başlayarak, 2017.01.26 09:43 tarihli gönderi).

Sevgili geliştiriciler, tiki'yi düzenleyelim! Kod sağlandı, işte burada - sorun, hiçbir şey aramanıza gerek yok, sadece tepki verin ve düzeltin!

OnCalculate'i OnTick ile değiştirirseniz, hatalar ortaya çıkmaz. Sorun SymbolInfoTick'te değil, göstergelerin boşluk olmaması için çarpık bir şekilde yapılandırılmış olmasıdır.