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.