Nesnelerin Oluşturulması ve Silinmesi

Bir MQL5 programı çalıştırılmak için yüklendiğinde, her değişkene tipine göre bellek tahsis edilir. Erişim düzeylerine göre değişkenler global değişkenler ve yerel değişkenler olmak üzere iki türe ayrılır. Bellek sınıfına göre bunlar, bir MQL5 programının statik ve otomatik giriş parametreleri olabilirler. Her bir değişken, eğer gerekliyse karşılık gelen bir değer ile başlatılır. Değişken, kullanımının ardından sonlandırılır ve onun tarafından kullanılan bellek MQL5 yönetici sistemine verilir.

Global Değişkenlerin Başlatılması ve Sonlandırılması

Global değişkenler, bir MQL5 programının yüklenmesinin hemen ardından ve herhangi bir fonksiyon çağrılmadan önce otomatik olarak başlatılırlar. Başlatma sırasında ilk değerler basit tiplere atanır ve nesneler için –eğer varsa– bir yapıcı çağrılır. Girdi değişkenleri her zaman global düzeyde bildirilir ve program başlangıcında kullanıcı tarafından iletişim kutusunda ayarlanan değerler ile başlatılır.

Statik değişkenler genellikle yerel seviyede başlatılmalarına rağmen, bunlar için bellek önceden tahsis edilir. Global değişkenlerde olduğu gibi, başlatma işlemi programın yüklenmesinin hemen ardından gerçekleştirilir.

Başlatma sırası değişkenlerin bildirim sırasına karşılık gelir. Sonlandırma işlemi ise ters sırada gerçekleştirilir. Bu kural sadece 'new' operatörü ile oluşturulmamış değişkenler için doğrudur. Böyle değişkenler programın yüklenmesiyle oluşturulup başlatılır ve programın kaldırılmasıyla sonlandırılır.

Yerel Değişkenlerin Başlatılması ve Sonlandırılması

Yerel düzeyde başlatılan bir değişken statik değilse, değişken için otomatik olarak bellek tahsis edilir. Yerel değişkenler de tıpkı global değişkenler gibi, program yönetimi yerel değişkenin bildirimiyle karşılaştığı anda otomatik olarak başlatılırlar. Yani, başlatma sırası bildirim sırasına karşılık gelir.

Yerel değişkenler bildirildikleri program bloğunun bitiminde, bildirim sıralarının tersine göre sonlandırılır. Program bloğu bir birleşik operatördür; switch seçim operatörünün, döngü operatörlerinin (for, while, do-while), bir fonksiyon gövdesinin veya bir if-else operatörünün parçası olabilir.

Yerel değişkenler sadece program yönetimi yerel değişken bildirimiyle karşılaştığı anda başlatılırlar. Eğer programın çalıştırılması sırasında değişkenin bildirildiği blok çalıştırılmazsa, değişken de çalıştırılmaz.

Dinamik Olarak Yerleştirilmiş Nesnelerin Başlatılması ve Sonlandırılması

Nesne işaretçileri için özel bir durum söz konusudur; işaretçinin bildirimi, karşılık gelen nesnenin başlatılmasını gerektirmez. Dinamik olarak yerleştirilmiş nesneler sadece, sınıf örneği new operatörü ile oluşturuldığı zaman başlatılırlar. Nesnelerin başlatılması, karşılık gelen sınıfın bir yapıcısının çağrılmasını gerektirir. Eğer sınıf içinde karşılık gelen bir yapıcı yoksa, bu sınıfın basit tipli üyeleri otomatik olarak başlatılmayacaktır. Sınıfın dizgileri, dinamik dizileri ve nesneleri ise otomatik olarak başlatılır.

İşaretçiler global veya yerel düzeyde bildirilebilirler. Ayrıca boş değer NULL ile veya, aynı tipin yada miras tipin işaretçi değeri ile başlatılabilirler. Eğer new operatörü, yerel düzeyde bildirilmiş bir işaretçi için çağrılırsa, kapsamdan çıkmadan önce işaretçinin silinmesi için delete operatörü kullanılmalıdır. Aksi durumda işaretçi kaybolur ve nesnenin açık yolla silinmesi başarısız olur.

object_pointer=new Class_name, ifadesi ile oluşturulmuş tüm nesneler, sonradan delete(object_pointer) operatörü kullanılarak silinmelidir. Herhangi bir sebepten ötürü, böyle bir değişken delete operatörü ile silinmezse; program tamamlandığında buna karşılık gelen kayıt girdisi, "Uzmanlar" sekmesinde gözükecektir. Birkaç değişkeni bildirip, ardından hepsine tek bir sınıfın işaretçisini atamak mümkündür.

Eğer dinamik olarak oluşturulmuş bir nesne bir yapıcıya sahipse, bu yapıcı new operatörünün çalıştırılmasıyla beraber çağrılacaktır. Eğer nesne bir yıkıcıya sahipse, yapıcı, delete operatörünün çalıştırılmasıyla çağrılacaktır.

Bu şekilde dinamik olarak yerleştirilmiş nesneler, sadece new operatörü ile oluşturulacak ve delete operatörü ile (veya programın kaldırılması sırasında MQL5 yönetici sistemi tarafından otomatik olarak) silinecektir. Dinamik olarak oluşturulan nesnelerin bildirim sıraları, başlatılma sıralarını etkilemez. Başlatma ve sonlandırma sırası, tamamen programcı tarafından kontrol edilir.

MQL5 dilinde dinamik bellek tahsisi

Dinamik dizilerle çalışılırken serbest bırakılan bellek alanı hemen işletim sistemine devredilir.

new operatörü kullanarak dinamik sınıf nesneleri oluştururken, gereken bellek ilk olarak bellek yöneticisinin çalıştığı sınıf bellek havuzundan talep edilir. Eğer havuzda yeterli bellek mevcut değilse, gereken bellek alanı işletim sisteminden istenir. Bir dinamik nesnenin delete operatörü ile silinmesinin hemen ardından, serbest kalan bellek sınıf bellek havuzuna devredilir.

Bellek yöneticisi; OnInit(), OnDeinit(), OnStart(), OnTick(), OnCalculate(), OnTimer(), OnTrade(), OnTester(), OnTesterInit(), OnTesterPass(), OnTesterDeinit(), OnChartEvent(), OnBookEvent() olay işleme fonksiyonlarının sonlandırılmasının ardından, serbest kalan belleği işletim sistemine devreder.

Kısaca Değişken Nitelikleri

Oluşturulma ve silinme sırası, yapıcı ve yıkıcıların çağrılması gibi konularla ilgili temel bilgiler aşağıdaki tabloda verilmiştir.


Global otomatik değişken

Yerel otomatik değişken

Dinamik olarak oluşturulmuş nesne

Başlatma

MQL5 programının yüklenmesinin hemen ardından

çalıştırma esnasında, bildirildiği satıra ulaşıldığında

new operatörünün çalıştırılmasında

Başlatma sırası

bildirim sırasına göre

bildirim sırasına göre

bildirim sırasından bağımsız

Sonlandırma

MQL5 programı kaldırılmadan önce

bildirim bloğundan çıkıldığında

delete operatörü çalıştırıldığında veya MQL5 programı kaldırıldığında

Sonlandırma sırası

başlatma sırasının tersine

başlatma sırasının tersine

başlatma sırasından bağımsız

Yapıcı çağrısı

MQL5 programı yüklendiğinde

başlatılma sırasında

new operatörünün çalıştırılmasında

Yıkıcı çağrısı

MQL5 programının kaldırılması sırasında

değişkenin başlatıldığı bloktan çıkıldığında

delete operatörünün çalıştırılmasıyla

Hata günlükleri

"Uzmanlar" günlüğünde, otomatik olarak oluşturulmuş bir nesnenin silinme denemesinin başlatıldığına dair günlük mesajı

"Uzmanlar" günlüğünde, otomatik olarak oluşturulmuş bir nesnenin silinme denemesinin başlatıldığına dair günlük mesajı

"Uzmanlar" günlüğünde, MQL5 programı kaldırılırken silinmemiş olan dinamik oluşturulmuş nesnelere dair günlük mesajı

Ayrıca Bakınız

Veri Tipleri, Tiplerin Kapsüllenmesi ve Genişletilebilirliği, Değişkenlerin Başlatılması, Değişkenlerin Görünürlük Alanları ve Ömürleri