summaryrefslogtreecommitdiff
path: root/glib/glibmm/refptr.h
diff options
context:
space:
mode:
authorMurray Cumming <murrayc@murrayc.com>2015-07-19 19:36:46 +0200
committerMurray Cumming <murrayc@murrayc.com>2015-07-19 19:36:46 +0200
commiteedf161ea4a7e34476c105dc806e78a8ec4ccc09 (patch)
treedbf93c64324560b35842562a21d6f9de918857d6 /glib/glibmm/refptr.h
parent10898bc89ef57b2447b559af7e4e925739839f7d (diff)
downloadglibmm-eedf161ea4a7e34476c105dc806e78a8ec4ccc09.tar.gz
Glib::RefPtr: Move assignment operator: Unref the previous object.
Diffstat (limited to 'glib/glibmm/refptr.h')
-rw-r--r--glib/glibmm/refptr.h9
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;
}