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