Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00025
00028
00029 #ifndef THOR_SCOPEDPTR_HPP
00030 #define THOR_SCOPEDPTR_HPP
00031
00032 #include <Thor/Tools/NonCopyable.hpp>
00033 #include <Thor/Detail/SmartPtrImpl.hpp>
00034 #include <Thor/Config.hpp>
00035
00036 #include <algorithm>
00037 #include <cassert>
00038
00039
00040 namespace thor
00041 {
00042
00045
00051 template <typename T>
00052 class ScopedPtr : private NonCopyable
00053 {
00054
00055
00056 public:
00059 ScopedPtr();
00060
00064 explicit ScopedPtr(T* pointer);
00065
00068 ~ScopedPtr();
00069
00072 void Swap(ScopedPtr& other);
00073
00077 void Reset();
00078
00083 void Reset(T* pointer);
00084
00088 T* Release();
00089
00095 operator THOR_DETAIL SafeBool() const;
00096
00099 T& operator* () const;
00100
00103 T* operator-> () const;
00104
00107 T* Get() const;
00108
00109
00110
00111
00112 private:
00113 detail::SmartPtrImpl<T, NoCopy> mImpl;
00114 };
00115
00119 template <typename T>
00120 void swap(ScopedPtr<T>& lhs, ScopedPtr<T>& rhs);
00121
00123
00124 }
00125
00126 #include <Thor/Detail/ScopedPtr.inl>
00127 #endif // THOR_SCOPEDPTR_HPP