Daha geçen gün konuştuğumuz yapı-nesne depolama farklarının üzerine şimdi de std.typecons.scoped'tan haberim oldu. Bir sınıf nesnesini bir yapı gibi yerel olarak oluşturmaya yarıyor:
import std.stdio;
import std.typecons;
class Sınıf
{
int i;
this()
{
writeln("kuruluyor");
}
~this()
{
writeln("sonlandırılıyor");
}
}
void foo()
{
auto değişken = scoped!Sınıf();
writeln("değişken : ", &değişken);
writeln("nesnenin üyesi: ", &(değişken.i));
}
void main()
{
writeln("foo çağrılmadan önce");
foo();
writeln("foo çağrıldıktan sonra");
}
Nesnenin program yığıtında oluşturulduğunu adreslerden anlıyoruz. Ayrıca çöp toplayıcıya kalmadan hemen kapsamdan çıkılırken sonlandırıldığı da görülüyor:
'foo çağrılmadan önce
kuruluyor
değişken : FFFE99AC
nesnenin üyesi: FFFE99B4
sonlandırılıyor
foo çağrıldıktan sonra
'
Böyle kullanınca yaşam süreci açısından aynı bir C++ sınıfı gibi oluyor. 'scoped' bunu, sınıf nesnesini bir yapı içinde sarmalayarak gerçekleştiriyor. D'nin gücünü gösteren başka bir örnek... :)
Ali
Not: Phobos'un kaynak kodunun herkesin bilgisayarında olduğunu biliyoruz değil mi... Örneğin scoped için bakınız: dmd/src/phobos/std/typecons.d
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]