refactor: fase 5 — singletons a std::unique_ptr (elimina new/delete manual)
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>
This commit is contained in:
@@ -20,14 +20,11 @@ extern unsigned char* LoadPalette(unsigned char* data);
|
||||
|
||||
namespace Resource {
|
||||
|
||||
Cache* Cache::instance = nullptr;
|
||||
std::unique_ptr<Cache> Cache::instance;
|
||||
|
||||
void Cache::init() { instance = new Cache(); }
|
||||
void Cache::destroy() {
|
||||
delete instance;
|
||||
instance = nullptr;
|
||||
}
|
||||
auto Cache::get() -> Cache* { return instance; }
|
||||
void Cache::init() { instance = std::unique_ptr<Cache>(new Cache()); }
|
||||
void Cache::destroy() { instance.reset(); }
|
||||
auto Cache::get() -> Cache* { return instance.get(); }
|
||||
|
||||
namespace {
|
||||
auto basename(const std::string& path) -> std::string {
|
||||
|
||||
Reference in New Issue
Block a user