Derleyicinin henüz yardım etmediği tehlikeli bir durum var. Derleyicinin geliştirilmesi için şu hata raporunu oluşturdum:
http://d.puremagic.com/issues/show_bug.cgi?id=7087
Dilimlerin elemanları uzun süre yaşatma gibi bir yan etkileri var. Elimizde tuttuğumuz dilimin elemanlarının geçerli olduklarını bekleriz. Ne yazık ki yerel bir statik diziye dilim döndürüldüğünde dilimin erişim sağlamaya devam ettiği elemanların yaşamları o kapsamdan çıkıldığında sona eriyor:
int[] dilimDöndüren()
{
int[3] a;
return a[]; // HATA: Döndürülen dilimin eriştirdiği elemanlar
// geçerli olmayacaklar.
}// <-- a'nın elemanları bu noktadan sonra geçerli değiller
Bu konuya dikkat etmek gerek.
İşin kötüsü, işlevi biraz değiştirince kod yasal hale geliyor:
int[] dilimDöndüren()
{
int[] a = [ 1, 2, 3 ];
return a[];
}
Şimdi elemanlar çöp toplayıcıya ait oldukları için döndürülen dilim tarafından canlı tutulurlar.
Ali
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]