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
Andrey Pogoreltsev :
İ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
Класс CArrayObj обеспечивает возможность работы с динамическим массивом указателей на экземпляры класса CObject и его наследников. Это дает возможность работы как с многомерными динамическими массивами примитивных типов данных, так и с более сложно организованными структурами данных. В классе реализованы возможности добавления/вставки/удаления...
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.
Структура является набором элементов произвольного типа (кроме типа void). Таким образом, структура объединяет логически связанные данные разных типов. Объявление структуры Имя структуры нельзя использовать в качестве идентификатора (имени переменной или функции). Следует иметь ввиду, что в MQL5 элементы структуры следуют непосредственно друг...
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.
İkincisi, herhangi bir dizi-koleksiyon ve sürekli okuma söz konusu değil, parçalanmış bir sisteminiz var.
Üçüncüsü - hiç kimse işaretçiyi toplama nesnesine ilettiğinizi garanti etmez.
Andrey Pogoreltsev : Burada koleksiyona bir pointer ekledikten sonra onun da sizinle kalmasından bahsediyoruz. Bu ilk.
İkincisi, herhangi bir dizi-koleksiyon ve sürekli okuma söz konusu değil, parçalanmış bir sisteminiz var.
Üçüncüsü - hiç kimse işaretçiyi toplama nesnesine ilettiğinizi garanti etmez.
Bu, yarattığınız tüm nesnelerin terminal alt sistemi tarafından otomatik olarak kaldırılmasını ve bunlara işaret edenlerin listelere yerleştirilmesini koltuk değneği olarak adlandırmanızla ilgiliydi, ancak nesnelerinizin manuel yönetimini ve koltuk değneklerinizi yaratmayı düşünmüyorsunuz. bu bir koltuk değneği
1. paragraftaki açıklamalarınız ışığında bu söz konusu değildi ve sonuç olarak - size cevabımın ana nedeni
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
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ı)
#define GENERATE_VECTOR_GROWTH_FACTOR 2#define GENERATE_VECTOR(NAME, REF) \
template < typename T> \
class NAME \
{ \
int sz; \
bool fail_state; \
public : \
T a[]; \
NAME(): sz( 0 ), fail_state( false ) {} \
booloperator !() const { returnthis .fail_state;} \
uint size() const { returnthis .sz;} \
void clear() { this .sz = 0 ; this .fail_state = false ;} \
void push_back(T REF value) { \
if ( this .sz == ArraySize ( this .a) && \
ArrayResize ( this .a, this .sz* \
GENERATE_VECTOR_GROWTH_FACTOR+ 1 ) == - 1 ) { \
this .fail_state = true ; \
return ; \
} \
this .a[ this .sz++] = value; \
} \
void reserve( int new_cap) { \
if (new_cap > ArraySize ( this .a)) \
ArrayResize ( this .a, new_cap); \
} \
void erase( int pos) { \
if ( ! ArrayRemove ( this .a, pos, 1 ) ) \
this .fail_state = true ; \
} \
};
#define GENERATE_VECTOR_EMPTY
GENERATE_VECTOR(vector_fund, GENERATE_VECTOR_EMPTY); // для фундаментальных типов
GENERATE_VECTOR(vector_ref, const &); // для пользовательских#undef GENERATE_VECTOR_EMPTY
#undef GENERATE_VECTOR_GROWTH_FACTOR
struct S { int a;};
class Q {};
bool f() {
vector_ref<S> v1;
vector_fund< int > v2;
vector_ref<Q> v3;
Q q;
v3.push_back(q);
v2.push_back( 3 );
v2.a[ 0 ] = 5 ;
return !(!v1 || !v2 || !v3);
}
İş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.
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.