C++’ta pointer şeması, bir nesnenin bellekte nerede yaşadığını, hangi pointer’ın ona sahip olduğunu ve ne zaman serbest bırakılması gerektiğini anlamanın temel yoludur. Düşük seviyeli dillerde bellek yönetimi manuel olduğu için, yanlış yapılan her işlem memory leak (bellek sızıntısı), dangling pointer (boşta kalmış pointer) veya use-after-free gibi hatalara yol açabilir. Bellek sızıntısı, heap’te ayrılan bir bölgenin hiçbir pointer tarafından işaret edilmemesi ve asla serbest bırakılmaması durumudur. Dangling pointer ise serbest bırakılmış bir bölgeyi hâlâ göstermeye devam eden pointer’dır. Bu yüzden C++’ta “kim tahsis etti, kim serbest bırakacak, kaç pointer aynı nesneyi gösteriyor?” soruları sahiplik şemasının kritik parçalarıdır.

Aşağıdaki kısa örnek, heap’te nesne oluşturmayı, int** üzerinden sahiplik/alias aktarımını, bilinçli bir bellek sızıntısını, dangling pointer oluşumunu ve nasıl önlenebileceğini tek bir akış içinde gösterir.

cpp
#include <iostream>
using namespace std;

// Allocates an integer on the heap and returns its pointer
int* allocate(int value) {
    return new int(value);
}

// Transfers ownership/alias by updating the external pointer
void transfer(int** target, int* source) {
    *target = source;
}

int main() {
    int* a = allocate(50);   // a → [50] on HEAP
    int* b = nullptr;

    transfer(&b, a);         // b now aliases a (b → [50])

    // Intentional memory leak: allocated but never deleted
    int* leak = allocate(999);  // LEAK

    cout << *a << " " << *b << endl;  // both print 50

    delete a;   // frees [50], but both a and b are now dangling pointers
    a = nullptr;
    b = nullptr;  // prevents accidental use-after-free

    return 0;
}