Thread overview
std.typecons.scoped ile yerel sınıf nesneleri
May 19, 2011
mert
May 19, 2011
mert
May 17, 2011

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. ]

May 19, 2011

Unutmuyorsunuz hiç :-)

Hoş bir örnek, Kopya sonrası işlevi ile çalıştırmaya kalktığımda hata verdi. Olasılıkla ben hata yapmışımdır. Sistemimi 64 bite taşımaya çalışıtığımdan çok üzerinde duramadım.

Galiba daha iyi inceleyebilmek için gece bolca vaktim olacak.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

May 19, 2011

this(this) yalnızca yapılarla kullanılabilir. Acaba sınıfa eklemeye mi çalıştın?

Sınıfları kopyalamak için özel bir işlev yazmak gerekir. Ben, dizilere benzesin diye o işlevin isminin dup() olmasının yararlı olacağını düşünüyorum; ama kopyala() gibi bir isim de olur.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

May 20, 2011

Biliyorum. sınıf nesnesini yapı gibi oluşturmaya yarıyor ya" acaba kopya sonrası işlevi eklesem olur mu?" diye düşünmüştüm olmuyormuş. Bu yöntemi kopya sonrası işlev olmadan kullanabiliyoruz demek ki.

Phobos içeriğini birazcık kurcalayayım :-)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]