[libsigc++2] C++11: signal_base: Add move operations.



commit 2bd489c2f91a32b99c478ae8464f30360c3f7aad
Author: Murray Cumming <murrayc murrayc com>
Date:   Tue Sep 1 15:19:45 2015 +0200

    C++11: signal_base: Add move operations.

 sigc++/signal_base.cc |   19 ++++++++++++++++++-
 sigc++/signal_base.h  |    6 +++++-
 2 files changed, 23 insertions(+), 2 deletions(-)
---
diff --git a/sigc++/signal_base.cc b/sigc++/signal_base.cc
index 3caa332..20074ec 100644
--- a/sigc++/signal_base.cc
+++ b/sigc++/signal_base.cc
@@ -167,6 +167,13 @@ signal_base::signal_base(const signal_base& src)
   impl_->reference();
 }
 
+signal_base::signal_base(signal_base&& src)
+: trackable(std::move(src)),
+  impl_(std::move(src.impl_))
+{
+  src.impl_ = nullptr;
+}
+
 signal_base::~signal_base()
 {
   if (impl_)
@@ -223,7 +230,7 @@ signal_base::iterator_type signal_base::erase(iterator_type i)
   return impl()->erase(i);
 }
 
-signal_base& signal_base::operator = (const signal_base& src)
+signal_base& signal_base::operator=(const signal_base& src)
 {
   if (src.impl_ == impl_) return *this;
 
@@ -241,6 +248,16 @@ signal_base& signal_base::operator = (const signal_base& src)
   return *this;
 }
 
+signal_base& signal_base::operator=(signal_base&& src)
+{
+  trackable::operator=(std::move(src));
+  impl_ = std::move(src.impl_);
+
+  src.impl_ = nullptr;
+
+  return *this;
+}
+
 internal::signal_impl* signal_base::impl() const
 {
   if (!impl_) {
diff --git a/sigc++/signal_base.h b/sigc++/signal_base.h
index 100eede..5b3d668 100644
--- a/sigc++/signal_base.h
+++ b/sigc++/signal_base.h
@@ -284,9 +284,13 @@ struct SIGC_API signal_base : public trackable
 
   signal_base(const signal_base& src);
 
+  signal_base(signal_base&& src);
+
   ~signal_base();
 
-  signal_base& operator = (const signal_base& src);
+  signal_base& operator=(const signal_base& src);
+
+  signal_base& operator=(signal_base&& src);
 
   /** Returns whether the list of slots is empty.
    * @return @p true if the list of slots is empty.


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]