From a7c6cdcbc166966db05a568fcf1840a9c3d671cb Mon Sep 17 00:00:00 2001 From: Hannes Janetzek Date: Fri, 3 Jul 2015 15:22:56 +0200 Subject: [PATCH] use unique_ptr in SettingChanges --- src/emitterstate.cpp | 5 ++++- src/setting.h | 12 ++++-------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/emitterstate.cpp b/src/emitterstate.cpp index 3ea5570..124dc1c 100644 --- a/src/emitterstate.cpp +++ b/src/emitterstate.cpp @@ -127,7 +127,10 @@ void EmitterState::StartedGroup(GroupType::value type) { std::unique_ptr pGroup(new Group(type)); // transfer settings (which last until this group is done) - pGroup->modifiedSettings = m_modifiedSettings; + // + // NB: if pGroup->modifiedSettings == m_modifiedSettings, + // m_modifiedSettings is not changed! + pGroup->modifiedSettings = std::move(m_modifiedSettings); // set up group if (GetFlowType(type) == Block) diff --git a/src/setting.h b/src/setting.h index 508193e..5f09d1d 100644 --- a/src/setting.h +++ b/src/setting.h @@ -62,10 +62,6 @@ class SettingChanges : private noncopyable { void clear() { restore(); - - for (setting_changes::const_iterator it = m_settingChanges.begin(); - it != m_settingChanges.end(); ++it) - delete *it; m_settingChanges.clear(); } @@ -76,22 +72,22 @@ class SettingChanges : private noncopyable { } void push(std::unique_ptr pSettingChange) { - m_settingChanges.push_back(pSettingChange.release()); + m_settingChanges.push_back(std::move(pSettingChange)); } // like std::unique_ptr - assignment is transfer of ownership - SettingChanges& operator=(SettingChanges& rhs) { + SettingChanges& operator=(SettingChanges&& rhs) { if (this == &rhs) return *this; clear(); - m_settingChanges = rhs.m_settingChanges; + m_settingChanges = std::move(rhs.m_settingChanges); rhs.m_settingChanges.clear(); return *this; } private: - typedef std::vector setting_changes; + typedef std::vector> setting_changes; setting_changes m_settingChanges; }; }