From c77d4edf41fae9f5a6f6e4130eaf38b2c5a85129 Mon Sep 17 00:00:00 2001 From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz> Date: Thu, 10 Apr 2014 11:00:39 +0200 Subject: [PATCH] move semantics --- alib2/src/regexp/Alternation.cpp | 19 +++++++++++-------- alib2/src/regexp/Alternation.h | 4 +++- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/alib2/src/regexp/Alternation.cpp b/alib2/src/regexp/Alternation.cpp index 8662f58403..9b3bd1e821 100644 --- a/alib2/src/regexp/Alternation.cpp +++ b/alib2/src/regexp/Alternation.cpp @@ -19,24 +19,27 @@ Alternation::Alternation(const Alternation& other) { } } +Alternation::Alternation(Alternation&& other) noexcept : elements(std::move(other.elements)) { + other.elements.clear(); +} + Alternation& Alternation::operator=(const Alternation& other) { if (this == &other) { return *this; } - for (auto element : elements) { - delete element; - } - elements.clear(); + *this = Alternation(other); - for (const auto& element : other.elements) { - elements.push_back(element->clone()); - } + return *this; +} +Alternation& Alternation::operator=(Alternation&& other) { + std::swap(this->elements, other.elements); + return *this; } -Alternation::~Alternation() { +Alternation::~Alternation() noexcept { for (auto element : elements) { delete element; } diff --git a/alib2/src/regexp/Alternation.h b/alib2/src/regexp/Alternation.h index 6b14f5bbd2..098e601f84 100644 --- a/alib2/src/regexp/Alternation.h +++ b/alib2/src/regexp/Alternation.h @@ -23,8 +23,10 @@ private: public: Alternation(); Alternation(const Alternation& other); + Alternation(Alternation&& other) noexcept; Alternation& operator =(const Alternation& other); - ~Alternation(); + Alternation& operator =(Alternation&& other); + ~Alternation() noexcept; /** * @return list of operands -- GitLab