Egy újabb C++-os félreértés, hogy csak a delete meghívása manuális memóriakezelés, és ha RAII-t használsz, az már "automatikus".
Jó, lehet így definiálni a fogalmakat, de az én szememben az is manuális memóriakezelés, amikor minden egyes objektumnál felteszed magadnak a következő kérdéseket:
* Túl kell élni-e az objektumnak a scope-ot, amelyben létrejött?
** Polimorf az objektum?
*** → stack allocation
** → scoped_ptr / unique_ptr
* Szükséges az osztott hozzáférés?
** → unique_ptr
* Lehetnek körkörös hivatkozások?
** → shared_ptr
* Megtörhetőek a hivatkozási körök gyenge referenciákkal?
** → shared_ptr + weak_ptr
* → tracing GC
Olvasási szabályok: minden kérdésre igen vagy nem választ kell adni, igen válasz esetén a következő azonos behúzású pontra kell ugrani, nem válasz esetén az alatta lévő, eggyel nagyobb behúzású pontra. Ahol nyíl van, az a pont megadja a végső megoldást az adott helyzetre.
Persze, az esetek legnagyobb részében a stack a jó megoldás, így csak két kérdést kell feltenni, továbbá egyre ritkábban jut csak el egyre mélyebbre az ember ebben a kérdéssorban. Ugyanakkor minél mélyebbre jut az ember, annál bonyolultabb ezeket a kérdéseket megválaszolni, és a legritkább esetben az is előfordul, hogy csak egy tracing GC tudja megoldani a problémát.
Összehasonlításképpen egy valóban automatikus memóriakezelésű nyelvnél a következő kérdéssort kell használni: