Sınıf nesnelerinin sonlandırıcıları yaşamlarının sona erdiği yerde değil, ilerideki belirsiz bir zamanda çağrılır. Örneğin şu programın çıktısında ~this'in main'den çıkıldıktan sonra çağrıldığını görüyoruz:
import std.stdio;
class Sınıf
{
~this()
{
writeln("~this çağrıldı");
}
}
void main()
{
{
auto nesne = new Sınıf;
} // <-- nesne'nin yaşamı sona erdi
writeln("main'den çıkılıyor");
}
Çıktısı:
'main'den çıkılıyor
~this çağrıldı
'
Sonlandırıcının, yaşamın sona erdiği anda çağrılmasını sağlamak için eskiden (aslında en azından 2.053 ile bile) 'scope' belirteci kullanılıyordu. Yukarıdaki programda tek değişiklik yapalım:
scope auto nesne = new Sınıf;
Şimdi çıktının sırası değişir:
'~this çağrıldı
main'den çıkılıyor
'
Bu eski bilgiyi daha önce şu sayfada anlatmıştım:
http://ddili.org/ders/d/scope.html
O kalıntı sayfanın ismini ve içeriğini değiştirdim:
http://ddili.org/ders/d/clear.html
Orada da anlatıldığı gibi; artık 'scope' belirteci değil, std.typecons.scoped kullanılıyor:
import std.typecons;
// ...
auto nesne = scoped!Sınıf;
Yine şu çıktıyı üretir:
'~this çağrıldı
main'den çıkılıyor
'
Ali
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]