July 06, 2010

Tdpl'yi okurken şöyle bir tanım gördüm(Burada da görmüştüm.):

int[] arr = new int[20];

Bende neden

int[] b;
b.length=20;

biçiminde göstermediğini merak ettim. Sadece daha kısa kod yazımı için mi ? Birde new'i dinamik dizi ve sınıftaki görevinden başka yararı var mı ?

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

July 06, 2010

Birisi tek satır, diğeri iki satır... :)

İkisinde de elemanlar için dinamik bellekten yer ayrılır. Şu programdaki adreslerden de anlaşıldığı gibi, ikisinin elemanları bellekte komşu olarak duruyorlar:

import std.stdio;
import std.array;

void bilgiVer(string isim, ref int[] dizi)
{
   writeln("isim              : ", isim);
   writeln("dilimin adresi    : ", &dizi);
   writeln("elemanların adresi: ", dizi.ptr);
   writeln("uzunluk           : ", dizi.length);
   writeln("kapasite          : ", dizi.capacity);
}

void main()
{
   int[] a = new int[20];

   int[] b;
   b.length=20;

   bilgiVer("a", a);
   bilgiVer("b", b);
}

Şu anda 'Bellek Yönetimi' isimli dersi bitirmeye çalışıyorum ama Phobos'la oynamaktan zaman bulamıyorum. :D new ve delete orada anlatılacak.

new'e ve delete'e normalde D'de hiç ihtiyaç yok ama değişkenlerin dinamik bellekten ayrılan bir yerde kurulması için kullanıldığını söyleyebiliriz. Bir int bile new ile oluşturulabilir.

Ama new gösterge döndürdüğü için değişkenin türünü int* olarak yazmak gerekir:

import std.stdio;

void main()
{
   int * sayıGöstergesi = new int;
   *sayıGöstergesi = 42;

   writeln("adresi: ", sayıGöstergesi, " değeri: ", *sayıGöstergesi);

   // Dinamik değişkenler de çöp toplayıcı tarafından temizlenirler; ama
   // kendimiz delete ile de çabucak sonlandırabiliriz:
   delete sayıGöstergesi;
}

Ali

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