diff --git a/library/Core.cpp b/library/Core.cpp index 52705af1a..5eec30489 100644 --- a/library/Core.cpp +++ b/library/Core.cpp @@ -2300,10 +2300,6 @@ int Core::Shutdown ( void ) plug_mgr = 0; } // invalidate all modules - for(size_t i = 0 ; i < allModules.size(); i++) - { - delete allModules[i]; - } allModules.clear(); memset(&(s_mods), 0, sizeof(s_mods)); d.reset(); @@ -2826,9 +2822,9 @@ TYPE * Core::get##TYPE() \ if(errorstate) return NULL;\ if(!s_mods.p##TYPE)\ {\ - Module * mod = create##TYPE();\ - s_mods.p##TYPE = (TYPE *) mod;\ - allModules.push_back(mod);\ + std::unique_ptr mod = create##TYPE();\ + s_mods.p##TYPE = (TYPE *) mod.get();\ + allModules.push_back(std::move(mod));\ }\ return s_mods.p##TYPE;\ } diff --git a/library/include/Core.h b/library/include/Core.h index 8e70f928f..0fec2774d 100644 --- a/library/include/Core.h +++ b/library/include/Core.h @@ -243,7 +243,7 @@ namespace DFHack Notes * pNotes; Graphic * pGraphic; } s_mods; - std::vector allModules; + std::vector> allModules; DFHack::PluginManager * plug_mgr; std::vector script_paths[2]; diff --git a/library/include/ModuleFactory.h b/library/include/ModuleFactory.h index 87c9a726f..5c3c149a2 100644 --- a/library/include/ModuleFactory.h +++ b/library/include/ModuleFactory.h @@ -27,13 +27,13 @@ distribution. #ifndef MODULE_FACTORY_H_INCLUDED #define MODULE_FACTORY_H_INCLUDED +#include + namespace DFHack { class Module; - Module* createGui(); - Module* createWorld(); - Module* createMaterials(); - Module* createNotes(); - Module* createGraphic(); + std::unique_ptr createMaterials(); + std::unique_ptr createNotes(); + std::unique_ptr createGraphic(); } #endif diff --git a/library/modules/Graphic.cpp b/library/modules/Graphic.cpp index e965bc7e1..1d84926e3 100644 --- a/library/modules/Graphic.cpp +++ b/library/modules/Graphic.cpp @@ -36,14 +36,15 @@ using namespace std; #include "Error.h" #include "VersionInfo.h" #include "MemAccess.h" +#include "MiscUtils.h" #include "ModuleFactory.h" #include "Core.h" using namespace DFHack; -Module* DFHack::createGraphic() +std::unique_ptr DFHack::createGraphic() { - return new Graphic(); + return dts::make_unique(); } struct Graphic::Private diff --git a/library/modules/Materials.cpp b/library/modules/Materials.cpp index a8f10d7d2..51d717d05 100644 --- a/library/modules/Materials.cpp +++ b/library/modules/Materials.cpp @@ -592,12 +592,11 @@ bool DFHack::isStoneInorganic(int material) return true; } -Module* DFHack::createMaterials() +std::unique_ptr DFHack::createMaterials() { - return new Materials(); + return dts::make_unique(); } - Materials::Materials() { } diff --git a/library/modules/Notes.cpp b/library/modules/Notes.cpp index b5215102f..04fb59e4d 100644 --- a/library/modules/Notes.cpp +++ b/library/modules/Notes.cpp @@ -33,6 +33,7 @@ using namespace std; #include "Types.h" #include "Error.h" #include "MemAccess.h" +#include "MiscUtils.h" #include "ModuleFactory.h" #include "Core.h" #include "modules/Notes.h" @@ -40,9 +41,9 @@ using namespace std; #include "df/ui.h" using namespace DFHack; -Module* DFHack::createNotes() +std::unique_ptr DFHack::createNotes() { - return new Notes(); + return dts::make_unique(); } // FIXME: not even a wrapper now