delete ile delete[] aslinda enteresan bir konu. cunku ben onu C'den kalan array ile uyumluluk probleminin sonucu olarak gorurum. C++'i C gibi kullanan (her zaman hata olarak degil bazen kosullar geregi) insanlarin karsilasma olasiligi daha yuksek. Straustroup'un dedigi gibi RAII kullanirsa kisi bu tehlikelere dusmemeli. Yani ya array'leri classlara wrap etmeli ya STL container'i kullanmali falan filan.
Bence daha buyuk tehlike if (foo = bar)
C++'in problemi bence bu:
- dil cok guclu (hem ifade edebilecegi seyler, hem performans, hem olceklenebilirlik yonunden)
- dilin bu gucunu dogru kullanmak icin paketler halinde takip edilmesi gereken bazi idiom'lar var: Mesela value types + RAII + exception handling + STL + boost + single exe beraber kullanilmali. Ya da , COM + abstract factory'ler + no-exception (error codes) + multiple dlls + Dynamic Polymorphism beraber kullanilmali
- mesela herkes STL kullanir. ama exception handle etmez, RAII kullanmaz. Dolayisiyla kodlari zaten kafadan leak dolu olur.
- bu idiom paketlerini parcalayip kullanirsan iste o zaman aci cekiyorsun.
- Ve iste C++'in eksigi bu: bu idiom paketlerinin paket olarak kullanildigini verify etmiyor compiler sana.
- bu idiom'larin onemli bolumu hayli advanced konular, gercek dunyadaki pekcok programci bunlari dogru sekilde anlayip kullanamiyor. icinden programcilarin gelip gectigi sirketlerde de C++ codebase'leri maintain etmek bu yuzden zor oluyor.
Yani benim kanim sudur: C++ cok guclu bir dil. Bazi cok zor problemleri cozebilecek gucte iken biraz buyukce olan projelerde hala kullanilabilecek olceklendirilebilirlige sahip tek dil su anda. Bu problem uzayi zor bir uzay. Cozebilen baska alternatif dil de ahanda bakiniz yok. Yani C++'a baktigimizda zor bir problemi cozebilen tek alternatife bakiyoruz. Bu uzayin zorlugu yuzunden C++ da ustalasmasi zor bir dil.
Ayni olcekte reuse destekleyen ve ayni seviyede performansa compile edilebilen baska bir dil ortaya cikana kadar, isi bu uzayda problem cozmek olan programcilar C++'la aralarindaki sevgi-nefret iliskisini surdurmeye devam etmek durumunda