Böyle güzel sorulara devam! :) Ben daha düzenli bir şekilde öğrenmeye başlayamadım. Bu sorular sayesinde çok şey öğreniyorum... :)
D dilinde çöp toplayıcının nesneleri sonlandıracağı garanti değilmiş:
http://www.digitalmars.com/d/2.0/class.html#destructors
Eğer mutlaka sonlanmasını istiyorsak açıkça 'delete''i çağırmak gerekiyormuş. O zaman çöp toplayıcı nesneyi beklendiği gibi hemen sonlandırıyormuş.
Yukarıdaki sayfadan iki nokta:
-
Önemli: Çöp toplayıcıya bırakılan nesnelerin bozucuları birbirlerinin üyelerini kullanamıyorlar; çünkü çöp toplayıcının hangi nesneyi hangi sırada sonlandırdığı belli değil.
-
Data segment'ten referans edilen nesneler çöp toplayıcı tarafından sonlandırılmıyorlar.
'static this', içinde tanımlanan globalleri ilklemek için kullanılıyor. Böylece arada kurmak için gereken başka işlemler de yapılabiliyor. Yani aslında bir fonksiyon gibi. Yoksa global kapsamda ifadeler kullnamıyoruz ya...
Gösterdiğin kodda yalnızca 'dünya''yı ilklemen yeterli; başına bir daha 'Dünya' yazmak doğru olmuyor:
import std.stdio;
class Sınıf
{
int değer_;
this(int değer)
{
değer_ = değer;
writeln("Sınıf");
}
~this()
{
writeln(değer_, " değerli ~Sınıf");
}
};
/* Burada daha ilklenmiyor; çünkü kurucu parametresini
* vermiyoruz zaten: */
Sınıf nesne;
static this()
{
/* Asıl ilkleme burada oluyor */
nesne = new Sınıf(42);
}
void main()
{
/* Mutlaka sonlanması gerekiyorsa: */
delete nesne;
}
Ali
Not 1: Renkli kod konusunda haklısın: güzel ama ekrandan kopyalarken numaralar da geliyor. :( Kod renklendirmesi kullandığımız forum programının bir olanağı; eminim onlar da standart bir şey kullanıyorlardır. Numaraları kaldırmak mümkün olmalı; ama sonra... ;)
Not 2: Acaba destructor'a sonlandırıcı demeye başlasa{m|k}? Hep bozucu diyorum ama artık sevmemeye başladım. :/
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]