| Üye GİRİŞİ |
Akıllı Göstergeler (smart pointers)int foo0() { char * p0, *p1;
p0 = malloc(1);
if (birSeylerYap(p0))
{
free(p0);
return 1;
}
p1 = malloc(1);
baskaSeylerYap(p0, p1);
free(p1);
free(p0);
return 0;
}
Yukarıdaki 'foo0' işlevinde bellek sızıntısı olmaması, programcının dikkatine kalmıştır. İşlevden çıkılan her noktada bellekten ayrılan bütün alanların geri verilmelerinin unutulmaması gerekir.
Bu kadar küçük bir işlevde sorunun büyüklüğü pek anlaşılmıyor olabilir. 'foo0'ın p2 adında bir göstergenin gösterdiği yeni bir bellek ayırması gerektiğini; hatta
işlevden çıkılabilecek yeni bir 'return' deyimi eklendiğini düşünün. Kod gittikçe daha karmaşık ve hatasız yazılması çok daha güç bir hale gelir. Her C programcısı bu tür işlevlerle karşılaşmıştır...
Daha ileri gitmeden önce, haksızlık olmasın diye, 'foo0'ı daha deneyimli bir programcının yazacağı şekliyle vereyim:
int foo0_dahaIyi()
{
char * p0;
p0 = malloc(1);
if (birSeylerYap(p0) == 0)
{
char * p1 = malloc(1);
baskaSeylerYap(p0, p1);
free(p1);
return 1;
}
free(p0);
return 0;
}
| acehreli 06.03.2004 | |
| Rating : 10 üzerinden 7.50 |
Yorum ekle