Akıllı pointerlar: konsept

Raw pointerlar, C’de kopyalamadan bir hafıza alanına erişmek, heap alanını yönetmek için kullanıldı.
Problemli tarafı genelde:

  • ayrılmamış hafızaya erişmek
  • ayrılmış hafızayı iade etmemek
  • iade edilmiş hafızayı yeniden iade etmeye çalışmak
  • pointer aritmatiğinde hata yapmak
  • veya pointerın yanlış yere işaret etmesiydi.

Tüm bunlar, programın aniden çökmesine, diğer programa geçilecek değerin yanlış üretilemesine, bazen de hiç bir etki göstermeden programın çalışmasına, ⏰ 💣 💥, neden olabiliyordu.

Bütün bunlar ayrıca dikkat edilmesi gereken bazı pratikler uygulanmasını, pointerın aynı scope’ta kullanılması ve serbest bırakılması, malloc-free, new-delete’lerin simetrik tutulması gibi, zorunlu kılıyordu. Heap yönetimi C’nin ve 2011 öncesi C++‘ın büyük problemiydi.

Akıllı pointerlar dile C++11 ile geldi ve <memory> başlığında tanımlandı. Her koşulda aldığı hafızayı iade etmesi, nesnenin yaşam döngüsünü yönetmesi, dahası raw pointer ile aynı boyda olmasıyla çoğu durumda tercih sebebi oldu.