MQL5 Derleyici, bir sınıf ile ona yönelik bir işaretçi arasında ayrım yapmaz - sayfa 7

 
Alexey Navoykov :
Onlar. genel olarak işaretçilerin örtük olarak kaldırılmasını yasaklamayı mı öneriyorsunuz? Buradaki pek çok insanın bundan memnun olacağını sanmıyorum.

Herkesin bir seçeneği olmasına izin ver

 #property strict

Bu numaralara gerçekten ihtiyacım yok.

 
SemenTalonov :

Pekala, söylemeye gerek yok. Burada bir bellek sızıntısı var.

Bellek sızıntısı mı dediniz? Ve öyle olsa bile? )))

 #property strict

class A
 {
  A*  item;
   int num;
public :
  A( int p= 10 ){num=p;item= NULL ;} ~A(){ if ( CheckPointer (item)== POINTER_DYNAMIC ) delete item;}
  A* operator =(A* par){ item = par; return & this ; }
  A* operator ~(){ return item; }
   int operator -(){ return num; }
 };

void OnStart ()
 {
  A a = new A( 20 );
   printf ( "В автообъекте %i (%i) сохранен динамический объект %i (%i), который он в конце своего цикла сам уничтожает..." ,&a,-a,~a,-~a);
 }


 
Ilya Malev :

Bellek sızıntısı mı dediniz? Ve öyle olsa bile? )))


 delete item;

Bu, nesnenin bu şekilde ele alınmaya hazır olduğunu varsayar. Kaç tanesi bunu sağlıyor?

 
SemenTalonov :

Bu, nesnenin bu şekilde ele alınmaya hazır olduğunu varsayar. Kaç tanesi bunu sağlıyor?

Sanırım birisi yeni kelimesini yazarsa, kodunun başka bir yerinde buna karşılık gelen silme kelimesinin tam olarak nerede olduğunu bilmesi gerekir.

 
Bu arada, bu tasarım biraz değiştirilmişse "çöp toplayıcı") olarak adlandırılır.)
 
SemenTalonov :

Herkesin bir seçeneği olmasına izin ver

Bu numaralara gerçekten ihtiyacım yok.

strict zaten MQL4'te kullanılıyor. Dillerin sözdizimi aynıysa, orada nasıl çalışacak?

Eh, bu tür eylemlere karşı koruma olarak, sınıfta özel bir yöntem oluşturabilirsiniz:

 class A
{
 private : void operator =( const A*);
}

Dürüst olmak gerekirse, burada bir sorun görmüyorum. Bir sınıf nesnesine bir şey atarsanız, bir kopya operatörü çağrısı beklersiniz. Aranıyor - alındı. İşaretçi veya nesne olması ne fark eder? Sınıf türü aynıdır. Herhangi bir sol sınıf atayamazsınız. Bu nedenle, tüm bunlar daha çok boş bir sıkıcılık gibidir.

Burada tam tersi durumda, işaretçi solda - başka bir konu. Orada bir işaretçiye bir şey atadığınızı bekleyebilirsiniz, ancak bir nesneyi kopyaladığınız ortaya çıktı.

 
Alexey Navoykov :

Burada tam tersi durumda, işaretçi solda - başka bir konu. Orada bir işaretçiye bir şey atadığınızı bekleyebilirsiniz, ancak bir nesneyi kopyaladığınız ortaya çıktı.

Ve onu yasaklayamazsınız, aksi takdirde gerçekten ihtiyacınız olduğunda nesneyi kopyalayamazsınız.

Sonunda, her şeyi olduğu gibi bırakmanız gerekir. Sadece ne yaptığınızın farkında olun.

 
fxsaber :

Ve onu yasaklayamazsınız, aksi takdirde gerçekten ihtiyacınız olduğunda nesneyi kopyalayamazsınız.

Sonunda, her şeyi olduğu gibi bırakmanız gerekir. Sadece ne yaptığınızın farkında olun.

Ö! Ana şey söylendi.

Burada hafıza yönetimi modlarına odaklanmış birçok insan var mı? OTOMATİK ve DİNAMİK arasındaki farkı anlamak.

Ve STATIC ve BASED'i duymuş biri (bu isteğe bağlı olmasına rağmen).

 
fxsaber :

Ve onu yasaklayamazsınız, aksi takdirde gerçekten ihtiyacınız olduğunda nesneyi kopyalayamazsınız.

Sonunda, her şeyi olduğu gibi bırakmanız gerekir. Sadece ne yaptığınızın farkında olun.

Neden işe yaramayacak? Ayrıca gerekli olanı getirmek için * ve & operatörleri de vardır.
 
Alexey Navoykov :
Neden işe yaramayacak? Ayrıca gerekli olanı getirmek için * ve & operatörleri de vardır.

* nerede?

Neden: