diff --git a/server/gameserver/mt/MetaMgr.cc b/server/gameserver/mt/MetaMgr.cc index cbeb2004..5300cf58 100644 --- a/server/gameserver/mt/MetaMgr.cc +++ b/server/gameserver/mt/MetaMgr.cc @@ -133,6 +133,9 @@ namespace mt void MetaMgr::UnInit() { + for (auto t : meta_tables) { + t->destory_cb(); + } meta_tables.clear(); } diff --git a/server/gameserver/mt/MetaMgr.h b/server/gameserver/mt/MetaMgr.h index 6ad597ce..764d1532 100644 --- a/server/gameserver/mt/MetaMgr.h +++ b/server/gameserver/mt/MetaMgr.h @@ -58,6 +58,7 @@ namespace mt struct MetaTable { + std::function destory_cb; std::function static_pre_init_cb; std::function load_cb; std::vector> init_cbs; @@ -82,6 +83,16 @@ namespace mt void RegMetaTable(const std::string& dir) { std::shared_ptr p = std::make_shared(); + p->destory_cb = + [] () + { + for (T* item : T::raw_list) { + delete item; + } + T::raw_list.clear(); + T::id_hash.clear(); + T::name_hash.clear(); + }; p->static_pre_init_cb = [] () {