diff --git a/src/gui/core/event/handler.cpp b/src/gui/core/event/handler.cpp index 1be9b4aff99..00fde428197 100644 --- a/src/gui/core/event/handler.cpp +++ b/src/gui/core/event/handler.cpp @@ -59,7 +59,7 @@ namespace event /***** Static data. *****/ static std::unique_ptr handler_ = nullptr; -static events::event_context* event_context = nullptr; +static std::unique_ptr event_context = nullptr; #ifdef MAIN_EVENT_HANDLER static unsigned draw_interval = 0; @@ -532,7 +532,7 @@ void sdl_event_handler::connect(dispatcher* dispatcher) if(dispatchers_.empty()) { LOG_GUI_E << "creating new dispatcher event context"; - event_context = new events::event_context(); + event_context = std::make_unique(); join(); } @@ -567,7 +567,6 @@ void sdl_event_handler::disconnect(dispatcher* disp) if(dispatchers_.empty()) { LOG_GUI_E << "deleting unused dispatcher event context"; leave(); - delete event_context; event_context = nullptr; } } diff --git a/src/gui/widgets/generator.cpp b/src/gui/widgets/generator.cpp index 61545389ca6..b34dc2aa7c5 100644 --- a/src/gui/widgets/generator.cpp +++ b/src/gui/widgets/generator.cpp @@ -1157,7 +1157,7 @@ static_assert(false, "GUI2/Generator: GENERATE_BODY already defined!"); } #endif -std::unique_ptr generator_base::build( +std::unique_ptr generator_base::build( const bool has_minimum, const bool has_maximum, const placement placement, const bool select) { std::unique_ptr result = nullptr; @@ -1171,27 +1171,22 @@ namespace { void pointer_test() { - generator_base *a = generator_base::build( + auto a = generator_base::build( true, true, generator_base::horizontal_list, true); - generator_base *b = generator_base::build( + auto b = generator_base::build( true, false, generator_base::horizontal_list, true); - generator_base *c = generator_base::build( + auto c = generator_base::build( false, true, generator_base::horizontal_list, true); - generator_base *d = generator_base::build( + auto d = generator_base::build( false, false, generator_base::horizontal_list, true); a->clear(); b->clear(); c->clear(); d->clear(); - - delete a; - delete b; - delete c; - delete d; } void direct_test() diff --git a/src/gui/widgets/window.cpp b/src/gui/widgets/window.cpp index ab3d2682291..aee9e43323f 100644 --- a/src/gui/widgets/window.cpp +++ b/src/gui/widgets/window.cpp @@ -409,12 +409,6 @@ window::~window() if(!hidden_) { queue_redraw(); } - -#ifdef DEBUG_WINDOW_LAYOUT_GRAPHS - - delete debug_layout_; - -#endif } window* window::window_instance(const unsigned handle) diff --git a/src/gui/widgets/window.hpp b/src/gui/widgets/window.hpp index db8233d82ae..9b9922c4169 100644 --- a/src/gui/widgets/window.hpp +++ b/src/gui/widgets/window.hpp @@ -668,7 +668,7 @@ private: void finalize(const builder_grid& content_grid); #ifdef DEBUG_WINDOW_LAYOUT_GRAPHS - debug_layout_graph* debug_layout_; + std::unique_ptr debug_layout_; public: /** wrapper for debug_layout_graph::generate_dot_file. */ diff --git a/src/pathfind/teleport.cpp b/src/pathfind/teleport.cpp index e8a9df3eef2..a1662ed19a4 100644 --- a/src/pathfind/teleport.cpp +++ b/src/pathfind/teleport.cpp @@ -118,8 +118,10 @@ void teleport_group::get_teleport_pair( const filter_context * fc = resources::filter_con; assert(fc); + utils::optional ignore_context; if (ignore_units) { - fc = new ignore_units_filter_context(*resources::filter_con); + ignore_context.emplace(*resources::filter_con); + fc = &ignore_context.value(); } vconfig filter(cfg_.child_or_empty("filter"), true); @@ -133,10 +135,6 @@ void teleport_group::get_teleport_pair( terrain_filter target_filter(target, fc, false); target_filter.get_locations(reversed_ ? loc_pair.first : loc_pair.second, u); } - - if (ignore_units) { - delete fc; - } } const std::string& teleport_group::get_teleport_id() const { diff --git a/src/persist_manager.cpp b/src/persist_manager.cpp index 8c69a8eb1ce..0bed37fb4eb 100644 --- a/src/persist_manager.cpp +++ b/src/persist_manager.cpp @@ -23,20 +23,19 @@ persist_manager::persist_manager() persist_manager::~persist_manager() { cancel_transaction(); - for (context_map::iterator i = contexts_.begin(); i != contexts_.end(); ++i) - delete (i->second); } persist_context &persist_manager::get_context(const std::string &ns) { persist_context::name_space name(ns,true); std::string key(name.root_); - context_map::iterator i = contexts_.find(key); - if (i == contexts_.end()) { - contexts_[key] = new persist_file_context(key); - if (in_transaction_) contexts_[key]->start_transaction(); + context_map::iterator iter = contexts_.find(key); + if (iter == contexts_.end()) { + auto pfc = std::make_unique(key); + if (in_transaction_) pfc->start_transaction(); + std::tie(iter, std::ignore) = contexts_.emplace(key, std::move(pfc)); } - persist_context *ret = contexts_[key]; + auto& ret = iter->second; if (ret->get_node() != ns) ret->set_node(name.descendants_); return *ret; diff --git a/src/persist_manager.hpp b/src/persist_manager.hpp index b04f7744b4b..490e9ea9fd3 100644 --- a/src/persist_manager.hpp +++ b/src/persist_manager.hpp @@ -16,13 +16,14 @@ #pragma once #include +#include #include class persist_context; class persist_manager { protected: - typedef std::map context_map; + typedef std::map> context_map; bool in_transaction_; context_map contexts_;