Genel sınıflar kütüphanesi - hatalar, açıklamalar, sorular, kullanım özellikleri ve öneriler - sayfa 26
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
AddValue'da nesnelerin kopyalarını yeni ile yaratırsınız, ancak onları yıkıcıda serbest bırakmazsınız, sadece işaretçiler listesini temizlersiniz.
yardım, bir yıkıcı çağrıldığında, kullanılan sınıfların yıkıcılarının da çağrılacağını söylüyor.
https://www.mql5.com/ru/docs/standardlibrary/datastructures/carrayobj#carrayobjfeatures
Komut dosyasını kaldırdıktan sonra terminalin yok edilmeyen nesneler hakkında günlüğe bir uyarı yazmadığı bir durumu hatırlamıyorum - örneğim böyle bir uyarı göstermiyor
İkincisi, doğru olana göre, bunu atama operatörü değil, kopya oluşturucu aracılığıyla yapmak gerekiyordu. Ama hepsi bu kadar IMHO)
geliştiricilere göre, MQL'deki basit yapıların veya sınıfların her zaman sorunsuz kopyalandığı bilgisini buldum, birkaç kez kontrol ettim, öyle görünüyor, dil özelliklerini kullanırken
burada, genel olarak, tüm tartışma nedir - MQL C ++ değil, aralarında analoji aramayı uzun zaman önce bıraktım, geliştiriciler bunun böyle uygulandığını yazdı - kontrol ettim, işe yarıyor - yani sen bunu kullanabilir, eğer standart bir C++ sözdizimine sahip olmak kritikse, .dll'deki tüm mantığı çıkarmak zor değil
AddValue'da nesnelerin kopyalarını yeni ile yaratırsınız, ancak onları yıkıcıda serbest bırakmazsınız, sadece işaretçiler listesini temizlersiniz.
Kahretsin! Ve yıkıcıda new aracılığıyla oluşturulan bir sınıfın örneğini nasıl silebilirsiniz. Dene. Bu işe yaramayacak.
Bunu yalnızca başka bir sınıfın yıkıcısında yapabilirsiniz.
Kahretsin! Ve yıkıcıda new aracılığıyla oluşturulan bir sınıfın örneğini nasıl silebilirsiniz. Dene. Bu işe yaramayacak.
Bunu yalnızca başka bir sınıfın yıkıcısında yapabilirsiniz.
Başka bir sınıfın yıkıcısıyla ilgiliydi. AddValue yönteminde new aracılığıyla oluşturulan öğelerden bahsediyordum
yardım, bir yıkıcı çağrıldığında, kullanılan sınıfların yıkıcılarının da çağrılacağını söylüyor.
https://www.mql5.com/ru/docs/standardlibrary/datastructures/carrayobj#carrayobjfeatures
Komut dosyasını kaldırdıktan sonra terminalin yok edilmeyen nesneler hakkında günlüğe bir uyarı yazmadığı bir durumu hatırlamıyorum - örneğim böyle bir uyarı göstermiyor
geliştiricilere göre, MQL'deki basit yapıların veya sınıfların her zaman sorunsuz kopyalandığı bilgisini buldum, birkaç kez kontrol ettim, öyle görünüyor, dil özelliklerini kullanırken
burada, genel olarak, tüm tartışma nedir - MQL C ++ değil, aralarında analoji aramayı uzun zaman önce bıraktım, geliştiriciler bunun böyle uygulandığını yazdı - kontrol ettim, işe yarıyor - yani sen bunu kullanabilir, eğer standart bir C++ sözdizimine sahip olmak kritikse, .dll'deki tüm mantığı çıkarmak zor değil
Evet, yardımda gördüm... Çok örtük bir şey, unique_ptr yerine koltuk değneği gibi...
Evet, yardımda gördüm... Çok örtük bir şey, unique_ptr yerine koltuk değneği gibi...
Ve o kadar rahat ki buna koltuk değneği diyorlar "el kalkmaz":
Herhangi bir sınıftan bir nesne yarattık, onu depolama listesine yerleştirdik ve artık kaldırılmasıyla ilgilenmemiz gerekmiyor - terminal alt sisteminin kendisi her şeyi temizleyecektir.
Ancak aynı zamanda manuel kontrolü ayarlayabilir ve ne zaman, nerede ve hangi ihtiyaç için yaratıldığını ve şimdi gerekli olup olmadığını takip etmek amacıyla yeni oluşturulan tüm nesnelerin ardından "çalıştırabilirsiniz". Gerekli değil - silin. Ama bir hata yaptı - gerekli olduğu ortaya çıktı - geçersiz bir işaretçiye itirazda bulundu ...
Bu yüzden koltuk değneği, işe yaramazlıklarını aramak için "nesnelerin peşinden koşar" ve nesnelerden birini yakalamamış olmanız durumunda bellek sızıntıları konusunda endişelenir.
İkincisi, doğru olana göre, bunu atama operatörü değil, kopya oluşturucu aracılığıyla yapmak gerekiyordu. Ama hepsi bu kadar IMHO)
doğru kopyalama nasıl yapılır, bu şablona örnek verir misiniz?
AddValue yöntemini yazmak için yardımı kullandım https://www.mql5.com/ru/docs/basis/types/classes
Kafamı kırdım ama MQL'de örneğimde yazdığımdan başka bir çözüm göremiyorum!
Uygun veri depolama uygulamanızı gösterin
Ve o kadar rahat ki buna koltuk değneği diyorlar "el kalkmaz":
Herhangi bir sınıftan bir nesne yarattık, onu depolama listesine yerleştirdik ve artık kaldırılmasıyla ilgilenmemiz gerekmiyor - terminal alt sisteminin kendisi her şeyi temizleyecektir.
Ancak aynı zamanda manuel kontrolü ayarlayabilir ve ne zaman, nerede ve hangi ihtiyaç için yaratıldığını ve şimdi gerekli olup olmadığını takip etmek amacıyla yeni oluşturulan tüm nesnelerin ardından "çalıştırabilirsiniz". Gerekli değil - silin. Ama bir hata yaptım - gerekli olduğu ortaya çıktı - geçersiz bir işaretçiye eriştiğimde uçtum ...
Bu yüzden koltuk değneği, işe yaramazlıklarını aramak için "nesnelerin peşinden koşar" ve nesnelerden birini yakalamamış olmanız durumunda bellek sızıntıları konusunda endişelenir.
Burada koleksiyona bir pointer ekledikten sonra onun da sizinle kalmasından bahsediyoruz. Bu ilk.
yardım, bir yıkıcı çağrıldığında, kullanılan sınıfların yıkıcılarının da çağrılacağını söylüyor.
https://www.mql5.com/ru/docs/standardlibrary/datastructures/carrayobj#carrayobjfeatures
Komut dosyasını kaldırdıktan sonra terminalin yok edilmeyen nesneler hakkında günlüğe bir uyarı yazmadığı bir durumu hatırlamıyorum - örneğim böyle bir uyarı göstermiyor
geliştiricilere göre, MQL'deki basit yapıların veya sınıfların her zaman sorunsuz kopyalandığı bilgisini buldum, birkaç kez kontrol ettim, öyle görünüyor, dil özelliklerini kullanırken
burada, genel olarak, tüm tartışma nedir - MQL C ++ değil, aralarında analoji aramayı uzun zaman önce bıraktım, geliştiriciler bunun böyle uygulandığını yazdı - kontrol ettim, işe yarıyor - yani sen bunu kullanabilir, eğer standart bir C++ sözdizimine sahip olmak kritikse, .dll'deki tüm mantığı çıkarmak zor değil
Bununla üçgen bir dizi yapabilir misin?
Dilin sınırlamaları nedeniyle, iyi bir şeyin ortaya çıkması pek olası değildir. Böyle bir koltuk değneğine sahibim (standart bir dizi üzerinde hafif bir sargı)
İşaretçileri depolamak için bir unique_ntr sarmalayıcı yazın (tam teşekküllü bir paket çalışmayacak olsa da, en azından auto_ntr). Benim düşünceme göre, böyle bir ilkel bile std'den şablon analoglarından çok daha uygundur.