Hatalar, hatalar, sorular - sayfa 1785
Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
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
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.
Anladım teşekkürler. MQL5'e çok şey aktarıyor musunuz? - neden böyle özel örnekler?
Sanal fonksiyonlar ve yıkıcı >>>
{
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.
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
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.
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!