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

 

eşit olduklarını

    a =b;
    b =a;
 
SemenTalonov :

eşit olduklarını

Bu görevi unutun.

 
Dmitry Fedoseev :

Bu görevi unutun.

Yani unutmak bana düşmez ama derleyici böyle yazmaya izin vermemeli .

Ve şu anda sadece derlemekle kalmıyor, aynı zamanda hatasız çalışıyor!

 
SemenTalonov :

Yani unutmak bana düşmez ama derleyici böyle yazmaya izin vermemeli .

Ve şu anda sadece derlemekle kalmıyor, aynı zamanda hatasız çalışıyor!

Derleyici izin verir çünkü ne yaptığınızı anlarsanız mümkündür.

 
class A
{
public:
    int iValue;
    A(){Print("++");}
   ~A(){Print("--");}
};
//......................
A m_A[2];

void OnStart()
{
A a;

    m_A[0] =a; 
    m_A[1] = new A();
}

Çalıştırın ve yapıcı ve yıkıcının kaç kez ve ne zaman çağrıldığını görün.

m_A[0]=a; bu durumda şuna eşdeğerdir: m_A[0].iValue=a.iValue;

new A(), bu durumda yeni bir nesne oluşturur, buna koşullu olarak temp diyelim ve aşağıdakiler olur: m_A[1].iValue=temp.iValue;

 
Vladimir Simakov :

Çalıştırın ve yapıcı ve yıkıcının kaç kez ve ne zaman çağrıldığını görün.

m_A[0]=a; bu durumda şuna eşdeğerdir: m_A[0].iValue=a.iValue;

Bu örnekte, ikinci satır doğru değil.

m_A[ 1 ] = new A();

Bir nesneye işaretçi kaydedemezsiniz. Derleyici bunu fark etmez.

 
SemenTalonov :

Bu örnekte, ikinci satır doğru değil.

Bir nesneye işaretçi kaydedemezsiniz. Derleyici bunu fark etmez.

Yazımı tekrar oku.
 
Vladimir Simakov :

Çalıştırın ve yapıcı ve yıkıcının kaç kez ve ne zaman çağrıldığını görün.

m_A[0]=a; bu durumda şuna eşdeğerdir: m_A[0].iValue=a.iValue;

new A(), bu durumda yeni bir nesne oluşturur, buna koşullu olarak temp diyelim ve aşağıdakiler olur: m_A[1].iValue=temp.iValue;

Muhtemelen yapıcı 3, yıkıcı 2. Gerisi doğru.

 
Vladimir Simakov :

ve aşağıdakiler gerçekleşir: m_A[1].iValue=temp.iValue;

Bu zaten 4. yorum!

O zaman neden çıkışta silme çağrısı yapması gerekiyor? Geçici bir nesne için mi?

 
SemenTalonov :

Bu zaten 4. yorum!

O zaman neden çıkışta silme çağrısı yapması gerekiyor? Geçici bir nesne için mi?

Onu yine de aramayın. Saf bellek sızıntısı.