diff --git a/lib/libconfig.h++ b/lib/libconfig.h++ index a2db99f..bcc0657 100644 --- a/lib/libconfig.h++ +++ b/lib/libconfig.h++ @@ -191,7 +191,8 @@ class LIBCONFIGXX_API Setting typedef SettingConstIterator const_iterator; public: - + Setting(Setting&&) noexcept; + Setting& operator=(Setting&&) noexcept; virtual ~Setting(); inline Type getType() const { return(_type); } @@ -474,6 +475,8 @@ class LIBCONFIGXX_API Config }; Config(); + Config(Config&&) noexcept; + Config& operator=(Config&&) noexcept; virtual ~Config(); void clear(); diff --git a/lib/libconfigcpp.c++ b/lib/libconfigcpp.c++ index 48f9875..4648905 100644 --- a/lib/libconfigcpp.c++ +++ b/lib/libconfigcpp.c++ @@ -363,6 +363,24 @@ Config::Config() config_set_fatal_error_func(__fatal_error_func); } +Config::Config(Config&& cfg) noexcept +{ + _config = cfg._config; + cfg._config = nullptr; +} + +Config& Config::operator=(Config&& cfg) noexcept +{ + if (this != &cfg) + { + config_destroy(_config); + delete _config; + _config = cfg._config; + cfg._config = nullptr; + } + return *this; +} + // --------------------------------------------------------------------------- Config::~Config() @@ -689,6 +707,26 @@ Setting::Setting(config_setting_t *setting) } } +Setting::Setting(Setting&& setting) noexcept +{ + _setting = setting._setting; + setting._setting = nullptr; + _type = std::move(setting._type); + _format = std::move(setting._format); +} + +Setting& Setting::operator=(Setting&& setting) noexcept +{ + if (this != &setting) + { + _setting = setting._setting; + setting._setting = nullptr; + _type = std::move(setting._type); + _format = std::move(setting._format); + } + return *this; +} + // --------------------------------------------------------------------------- Setting::~Setting()