- Mapa té un JD8_Surface fondo propi que s'allibera al destructor: una
còpia accidental provocaria double-free. Ara els 4 copy/move ops estan
= delete.
- ModuleGame ja era no-copiable implícitament per tindre unique_ptr
members, però els = delete expliciten la intenció i protegeixen
davant refactors futurs que afegeixquen tipus copiables.
Fi de la modernització RAII per fases (1–6).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 singletons afectats: Audio, Screen, Director, Resource::Cache, Resource::List.
- static T* instance → static std::unique_ptr<T> instance
- init(): new T() adoptat immediatament per unique_ptr (ownership RAII)
- destroy(): instance.reset() (sense delete manual)
- get(): retorna instance.get()
- Destructors moguts a public perquè std::default_delete hi pugui accedir
(ctors privats + copy/move deleted → encapsulació efectiva mantinguda)
Ordre de destrucció preservat: SDL_AppQuit segueix cridant destroy() en
l'ordre invers a init() — la RAII automàtica no s'activa fins al final
del programa (LIFO de variables static).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Eliminada completament la recursivitat per next-pointer:
- Momia::next, clear(), insertar() desapareixen
- update()/draw() no recursen: operen només sobre la instància pròpia
- ModuleGame::momies: Momia* (head de llista) → std::vector<std::unique_ptr<Momia>>
- Destructor simplificat (vector s'autodestrueix)
- Draw: range-for sobre el vector
- Update: std::erase_if + decrement sincronitzat de info::ctx.momies
- Cheat "alone": momies.clear()
- iniciarMomies i nova_momia: emplace_back(std::make_unique<Momia>(...))
Zero new/delete manuals al cicle de vida de les momies.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- bitmap_: Uint8* (owning, free'd al destructor) → std::vector<Uint8>
- loadBitmap copia des del buffer de LoadGif i fa free(pixels) de
l'intermedi (gif.h usa malloc internament)
- ~Text() eliminat: regla 0 aplicada (vector es destrueix sol)
- Les 4 comprovacions !bitmap_ → bitmap_.empty()
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- JD8_Init/Quit: new[]/delete[] per a screen, main_palette, pixel_data
- JD8_NewSurface/FreeSurface: new Uint8[64000]{}/delete[]
- JD8_LoadPalette: uniforme — sempre retorna `new Color[256]`, copiant del
LoadPalette extern al path no-cached (l'intermedi raw es frees amb free()
perquè gif.h el malloca)
- JD8_SetScreenPalette: delete[] la paleta reemplaçada
- slides/secreta/menu/banner/mort scenes: std::free/std::malloc → delete[]/new Color[256]
Ownership uniforme: tot el cicle de vida de surface/palette usa new[]/delete[].
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- jdraw8.hpp: typedef → using (JD8_Surface, JD8_Palette)
- jdraw8.cpp: NULL → nullptr, C-casts → static_cast/reinterpret_cast, anon enum FadeType → enum class
- momia.cpp: NULL → nullptr
- bola/mapa/marcador/momia/engendro: explicit als constructors
Zero canvis de lògica ni ownership. Primera fase de la modernització RAII.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>