Clean up a few more cases of raw pointer management

This commit is contained in:
Charles Dang 2024-10-17 23:20:50 -04:00
parent 491c236113
commit 38a6508cf4
7 changed files with 19 additions and 33 deletions

View File

@ -59,7 +59,7 @@ namespace event
/***** Static data. *****/
static std::unique_ptr<class sdl_event_handler> handler_ = nullptr;
static events::event_context* event_context = nullptr;
static std::unique_ptr<events::event_context> 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<events::event_context>();
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;
}
}

View File

@ -1157,7 +1157,7 @@ static_assert(false, "GUI2/Generator: GENERATE_BODY already defined!");
}
#endif
std::unique_ptr<generator_base> generator_base::build(
std::unique_ptr<generator_base> generator_base::build(
const bool has_minimum, const bool has_maximum, const placement placement, const bool select)
{
std::unique_ptr<generator_base> 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()

View File

@ -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)

View File

@ -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_graph> debug_layout_;
public:
/** wrapper for debug_layout_graph::generate_dot_file. */

View File

@ -118,8 +118,10 @@ void teleport_group::get_teleport_pair(
const filter_context * fc = resources::filter_con;
assert(fc);
utils::optional<ignore_units_filter_context> 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 {

View File

@ -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<persist_file_context>(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;

View File

@ -16,13 +16,14 @@
#pragma once
#include <map>
#include <memory>
#include <string>
class persist_context;
class persist_manager {
protected:
typedef std::map<std::string,persist_context *> context_map;
typedef std::map<std::string, std::unique_ptr<persist_context>> context_map;
bool in_transaction_;
context_map contexts_;