"MQL5'te Nesne Yaratma ve Yok Etme" makalesi için tartışma - sayfa 3

 

localvar_testscript_4.mq5 dosyasında

GetPointer() çağrısından sonra işaretçi türünü yazdırırsak, bize işaretçilerin POINTER_DINAMIC değil POINTER_AUTOMATIC olduğunu söyler.

m_array[i]=GetPointer(array[i]);
Print(EnumToString(CheckPointer(m_array[i])));  //POINTER_AUTOMATIC değil POINTER_DINAMIC

Bu nedenle bu satır asla çalıştırılmaz

if(CheckPointer(m_array[i])==POINTER_DYNAMIC) delete(m_array[i]);
 

<quote.

Bu bildirim sırasına göre,items_array, array [5] nesne dizisi yok edilmeden önce yok edilir .items_array yıkıcısından çağrılan Destroy() işlevinde, iş hala var olan nesnelere işaretçilerle yapılır, bu nedenle hata oluşmaz.

Herkese merhaba!

İşte bu noktada mantığı hiç anlamıyorum. =)

Sonuçta, Destroy yönteminde işaretçimizin türünü dinamik bir türle karşılaştırıyoruz. Ve bizim tipimiz otomatiktir. Bu nedenle delete operatörü kullanılmaz.

Ancak bu gerekli değildir, çünkü otomatik olarak oluşturulan nesneler otomatik olarak silinir.

Ve son olarak, dosya, Sınıf dışındaki yöntemlerin uygulanması aşamasında Destroy ve SetArray yöntemleri için geri dönüş değerinin türünü void olarak belirtmeyi unutmuş, bu nedenle hata veriyor.

Yeni başlayanlar (benim gibi) korkabilir =)


void CItemArray::Destroy(void)
  {
   for(int i=0;i<ArraySize(m_array);i++)
     {
      if(CheckPointer(m_array[i])!=POINTER_INVALID)
        {
         if(CheckPointer(m_array[i])==POINTER_DYNAMIC) delete(m_array[i]);
        }
      else Print("Invalid pointer to delete");
     }
  }