From 4d48c81998978f58e4386ea1e7c907ad95850694 Mon Sep 17 00:00:00 2001 From: Andrei Kortunov Date: Sat, 13 Mar 2021 22:28:13 +0400 Subject: [PATCH] Add move assignment operator and move constructor for the ESM::Variant --- components/esm/variant.cpp | 21 +++++++++++++++++++++ components/esm/variant.hpp | 2 ++ 2 files changed, 23 insertions(+) diff --git a/components/esm/variant.cpp b/components/esm/variant.cpp index 6ff31dc442..cbcb6e0024 100644 --- a/components/esm/variant.cpp +++ b/components/esm/variant.cpp @@ -62,10 +62,31 @@ ESM::Variant& ESM::Variant::operator= (const Variant& variant) return *this; } +ESM::Variant& ESM::Variant::operator= (Variant&& variant) +{ + if (&variant!=this) + { + delete mData; + + mType = variant.mType; + mData = variant.mData; + + variant.mData = nullptr; + } + + return *this; +} + ESM::Variant::Variant (const Variant& variant) : mType (variant.mType), mData (variant.mData ? variant.mData->clone() : nullptr) {} +ESM::Variant::Variant(Variant&& variant) +: mType (variant.mType), mData (variant.mData) +{ + variant.mData = nullptr; +} + ESM::VarType ESM::Variant::getType() const { return mType; diff --git a/components/esm/variant.hpp b/components/esm/variant.hpp index 5f179a7bdc..20b3aa76ed 100644 --- a/components/esm/variant.hpp +++ b/components/esm/variant.hpp @@ -46,8 +46,10 @@ namespace ESM ~Variant(); Variant& operator= (const Variant& variant); + Variant& operator= (Variant && variant); Variant (const Variant& variant); + Variant (Variant&& variant); VarType getType() const;