[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[lmi-commits] [lmi] odd/any_member-opt 7e47a9c 2/5: Make any_member<> mo
From: |
Greg Chicares |
Subject: |
[lmi-commits] [lmi] odd/any_member-opt 7e47a9c 2/5: Make any_member<> movable |
Date: |
Sun, 28 Mar 2021 13:53:15 -0400 (EDT) |
branch: odd/any_member-opt
commit 7e47a9c3a8ffc83cd0f214e7eead774e7f0073a8
Author: Ilya Sinitsyn <the_siv@mail.ru>
Commit: Gregory W. Chicares <gchicares@sbcglobal.net>
Make any_member<> movable
This will notably allow storing objects of this type in std::vector<>,
which was impossible before, as they were neither copyable nor movable.
---
any_member.hpp | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/any_member.hpp b/any_member.hpp
index e747ec3..94c0951 100644
--- a/any_member.hpp
+++ b/any_member.hpp
@@ -246,6 +246,7 @@ class any_member final
public:
any_member();
any_member(any_member const&);
+ any_member(any_member&&);
~any_member() override;
template<typename ValueType>
@@ -254,6 +255,7 @@ class any_member final
any_member& swap(any_member&);
any_member& operator=(any_member const&);
any_member& operator=(std::string const&);
+ any_member& operator=(any_member&&);
bool operator==(any_member const&) const;
bool operator!=(any_member const&) const;
@@ -285,6 +287,12 @@ any_member<ClassType>::any_member(any_member const& other)
{}
template<typename ClassType>
+any_member<ClassType>::any_member(any_member&& other)
+ :any_entity {std::move(other)}
+ ,content_ {std::exchange(other.content_, nullptr)}
+{}
+
+template<typename ClassType>
any_member<ClassType>::~any_member()
{
delete content_;
@@ -326,6 +334,16 @@ any_member<ClassType>&
any_member<ClassType>::operator=(std::string const& s)
}
template<typename ClassType>
+any_member<ClassType>& any_member<ClassType>::operator=
+ (any_member<ClassType>&& other
+ )
+{
+ delete content_;
+ content_ = std::exchange(other.content_, nullptr);
+ return *this;
+}
+
+template<typename ClassType>
bool any_member<ClassType>::operator==
(any_member<ClassType> const& other
) const