From d5a52d4fd7eef47bd552f7c58ca4986be34df79f Mon Sep 17 00:00:00 2001 From: Thomas Holder Date: Sun, 13 Jan 2019 22:45:55 +0100 Subject: std::unique_ptr<_ObserverData> --- src/preferences.cpp | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) (limited to 'src/preferences.cpp') diff --git a/src/preferences.cpp b/src/preferences.cpp index 8d0c8da73..84a56e0f8 100644 --- a/src/preferences.cpp +++ b/src/preferences.cpp @@ -675,10 +675,7 @@ void Preferences::addObserver(Observer &o) node = _findObserverNode(o.observed_path, node_key, attr_key, true); if (node) { // set additional data - if (o._data) { - delete o._data; - } - o._data = new _ObserverData(node, !attr_key.empty()); + o._data.reset(new _ObserverData(node, !attr_key.empty())); _observer_map[&o].reset(new PrefNodeObserver(o, attr_key)); @@ -695,20 +692,18 @@ void Preferences::addObserver(Observer &o) void Preferences::removeObserver(Observer &o) { // prevent removing an observer which was not added - if ( _observer_map.find(&o) != _observer_map.end() ) { + auto it = _observer_map.find(&o); + if (it != _observer_map.end()) { Inkscape::XML::Node *node = o._data->_node; - _ObserverData *priv_data = o._data; - o._data = nullptr; + _ObserverData *priv_data = o._data.get(); if (priv_data->_is_attr) { - node->removeObserver( *(_observer_map[&o]) ); + node->removeObserver(*it->second); } else { - node->removeSubtreeObserver( *(_observer_map[&o]) ); + node->removeSubtreeObserver(*it->second); } - delete priv_data; - priv_data = nullptr; - _observer_map.erase(&o); + _observer_map.erase(it); } } -- cgit v1.2.3