Add move constructor and move assignment operator to ref_ptr
Use conditional compilation to make it work only with C++11 support.
This commit is contained in:
parent
4dad4af47b
commit
61e04183ad
@ -22,6 +22,10 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if __cplusplus >= 201103L
|
||||||
|
#include <utility>
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace osg {
|
namespace osg {
|
||||||
|
|
||||||
template<typename T> class observer_ptr;
|
template<typename T> class observer_ptr;
|
||||||
@ -36,6 +40,9 @@ class ref_ptr
|
|||||||
ref_ptr() : _ptr(0) {}
|
ref_ptr() : _ptr(0) {}
|
||||||
ref_ptr(T* ptr) : _ptr(ptr) { if (_ptr) _ptr->ref(); }
|
ref_ptr(T* ptr) : _ptr(ptr) { if (_ptr) _ptr->ref(); }
|
||||||
ref_ptr(const ref_ptr& rp) : _ptr(rp._ptr) { if (_ptr) _ptr->ref(); }
|
ref_ptr(const ref_ptr& rp) : _ptr(rp._ptr) { if (_ptr) _ptr->ref(); }
|
||||||
|
#if __cplusplus >= 201103L
|
||||||
|
ref_ptr(ref_ptr&& rp) noexcept : _ptr(rp._ptr) { rp._ptr = 0; }
|
||||||
|
#endif
|
||||||
template<class Other> ref_ptr(const ref_ptr<Other>& rp) : _ptr(rp._ptr) { if (_ptr) _ptr->ref(); }
|
template<class Other> ref_ptr(const ref_ptr<Other>& rp) : _ptr(rp._ptr) { if (_ptr) _ptr->ref(); }
|
||||||
ref_ptr(observer_ptr<T>& optr) : _ptr(0) { optr.lock(*this); }
|
ref_ptr(observer_ptr<T>& optr) : _ptr(0) { optr.lock(*this); }
|
||||||
~ref_ptr() { if (_ptr) _ptr->unref(); _ptr = 0; }
|
~ref_ptr() { if (_ptr) _ptr->unref(); _ptr = 0; }
|
||||||
@ -52,6 +59,17 @@ class ref_ptr
|
|||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if __cplusplus >= 201103L
|
||||||
|
template<class Other> ref_ptr& operator = (ref_ptr<Other>&& rp)
|
||||||
|
{
|
||||||
|
if (_ptr == rp._ptr) return *this;
|
||||||
|
if (_ptr != nullptr) _ptr->unref();
|
||||||
|
_ptr = rp._ptr;
|
||||||
|
rp._ptr = nullptr;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
inline ref_ptr& operator = (T* ptr)
|
inline ref_ptr& operator = (T* ptr)
|
||||||
{
|
{
|
||||||
if (_ptr==ptr) return *this;
|
if (_ptr==ptr) return *this;
|
||||||
|
Loading…
Reference in New Issue
Block a user