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