diff options
author | Murray Cumming <murrayc@murrayc.com> | 2015-07-19 19:36:46 +0200 |
---|---|---|
committer | Murray Cumming <murrayc@murrayc.com> | 2015-07-19 19:36:46 +0200 |
commit | eedf161ea4a7e34476c105dc806e78a8ec4ccc09 (patch) | |
tree | dbf93c64324560b35842562a21d6f9de918857d6 | |
parent | 10898bc89ef57b2447b559af7e4e925739839f7d (diff) | |
download | glibmm-eedf161ea4a7e34476c105dc806e78a8ec4ccc09.tar.gz |
Glib::RefPtr: Move assignment operator: Unref the previous object.
-rw-r--r-- | glib/glibmm/refptr.h | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/glib/glibmm/refptr.h b/glib/glibmm/refptr.h index fd57b361..1aca555f 100644 --- a/glib/glibmm/refptr.h +++ b/glib/glibmm/refptr.h @@ -298,8 +298,17 @@ RefPtr<T_CppObject>& RefPtr<T_CppObject>::operator=(const RefPtr& src) template <class T_CppObject> inline RefPtr<T_CppObject>& RefPtr<T_CppObject>::operator=(RefPtr&& src) { + if (pCppObject_) + pCppObject_->unreference(); + pCppObject_ = src.pCppObject_; src.pCppObject_ = nullptr; + + //This should work instead, but seems less efficient: + //RefPtr<T_CppObject> temp (src); + //this->swap(temp); + //src.pCppObject_ = nullptr; + return *this; } |