Hatalar, hatalar, sorular - sayfa 1637

 
Slawa :

1. Beş mi dört mü? Sanırım dört. Sadece test penceresini büyütün.

2. Alın ve test edin

Haha çok teşekkür ederim (mt4)
1366 x 768 ((ekranın üçte birine genişletilmelidir.
Durugörü yeteneği senin seviyende.

 
A100 :

Daha basit bir örnek verelim

Soruya resmi olarak yaklaşırsak - A( A& ) biçiminde kaç çağrı? 1. En azından C++ herhangi bir ara nesne oluşturmaz

Belki de C++ RVO'da (dönüş değeri optimizasyonu) varsayılandır?
 
A100 :

1. Kopya oluşturucunun çift çağrısı

2. "Hafıza sızıntısı" mesajı yok (silme olmadan yeni)

  1. RVO optimizasyonu konusunda haklısınız (ayrıca NRVO var), şu anda MQL derleyicisinde yok, ancak gelecekte eklenecek (şimdilik, bu optimizasyonu öncelikli olmayan bir görev olarak görüyoruz)
  2. çoğaltılamaz, lütfen iki kez kontrol edin, çoğaltma için önemli ayrıntıları atlamış olabilirsiniz.
 
Ilyas : 2. Tekrarlanamaz, lütfen tekrar kontrol edin, çoğaltma için önemli detayları belirtmemiş olabilirsiniz.

Basitleştirilmiş örnek

 class A { public :
    A()          { Print ( __FUNCTION__ ); }
     virtual ~A() { Print ( __FUNCTION__ ); }
};
void OnStart ()
{
     new A();
}

Sonuç:

2016.08.15 14:17:39.093 Script1 (GBPUSD,M15) A::A

Sonuç: Yıkıcı çağrılmaz ve aynı zamanda bellek sızıntısı mesajı yoktur (aşağıdaki örnekte olduğu gibi)

 //Script2.mq5
class A { public :
    A()          { Print ( __FUNCTION__ ); }
     virtual ~A() { Print ( __FUNCTION__ ); }
};
void OnStart ()
{
    A *a = new A();
}

Sonuç:

2016.08.15 14:26:27.993 Script2 (GBPUSD,M15) 16 bayt sızdırılmış bellek
2016.08.15 14:26:27.993 Script2 (GBPUSD,M15) A türünden 1 nesne kaldı
2016.08.15 14:26:27.993 Script2 (GBPUSD,M15) 1 silinmemiş nesne kaldı
2016.08.15 14:26:27.992 Script2 (GBPUSD,M15) A::A

 
Açıklama için teşekkürler. Yeniden üretildi - sızıntı bildirilmedi ve işte nedeni:

Burada optimize edici aşırıya kaçtı, çünkü new operatöründe oluşturulmuş bellek veya işaretçi işlemi yoktur, ardından bu belleğin tahsisi kaldırılmıştır.

Optimize edicinin bu "özelliğini" düzeltmeye veya kullanılmayan bir değişkene bir işaretçi kaydetmenin yeni işlemin silinmesini engellememesi için iyileştirmeye değip değmeyeceğini değerlendireceğiz.

 
Tünaydın.
Geliştiriciler, MQL4 ve MQL5'te neden bir Uzman Danışmandan bir gösterge alt penceresini silmek için bir işlev olduğunu söyleyin, ancak bir gösterge penceresi oluşturmak için bir işlev yok.
Şablonları kullanmanız veya pencere göstergesini manuel olarak çalıştırmanız gerekir ki bu uygun değildir. grafikte çizilen bilgiler kaybolur.
Evet ve bir kaynak dosyasından göstergeleri çalıştırıp görüntüleyebilmek istiyorum.
Ya da nasıl organize edeceğimi söyle.
 
Slawa :

Ve "görselleştirme ile hayat hack" düzenleyen sen değil miydin?

Bunun bir bug olduğuna nasıl karar verdiniz? Klasörün adı, bağlantının gerçekleştiği bağlantı noktası numarasına karşılık gelir.

Ben.... teşekkürler, anladım.
 
makro yapıyorum
 #define MACROS(A) "##A##"
MACROS(Num) öğesinin "Num" ile değiştirilmesini istiyorum, ancak her zaman "##A##" çıkıyor. İstediğinizi elde etmek için bir makro tanımlamak mümkün mü?

 

Küçük bir keşif yaptı

 void OnStart ()
{  
   double dPrice = 1.08249 ;
   int iPrice = ( int )((dPrice / _Point ) + 0.1 );
   double dNewPrice = iPrice * _Point ; // При этом нормализации это значение не требует в OrderSend
  
   if (dPrice != dNewPrice)
     Print (( string )(dPrice - dNewPrice)); 
}

Tamsayı * Puan (normalizasyon olmadan) fiyatından bir emir açar ve ardından açılış fiyatını talep ederseniz, normalleştirilmemiş Tamsayı * Puanından farklı olacaktır.

Tamsayı * Noktası formunun normalleştirilmemiş fiyatları neden OrderSEnd'de HER ZAMAN yuvarlanır?

 
fxsaber :
Bir makro yapıyorum.MAKROS(Num)'un "Num" ile değiştirilmesini istiyorum, ancak her zaman "##A##" çıkıyor. İstediğinizi elde etmek için bir makro tanımlamak mümkün mü?

Makro gövdesinden tırnakları kaldırın

Bir makro parametresini bir dizgeye dönüştürmek için # kullanın:

 #define MACROS(A) #A
## jetonları yapıştırmak için kullanılır