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> mImpl;
00114
00115
00116
00117
00118 friend detail::SmartPtrImpl<T>& detail::GetImpl<T, ScopedPtr>(ScopedPtr& smartPointer);
00119 };
00120
00124 template <typename T>
00125 void swap(ScopedPtr<T>& lhs, ScopedPtr<T>& rhs);
00126
00128
00129 }
00130
00131 #include <Thor/Detail/ScopedPtr.inl>
00132 #endif // THOR_SCOPEDPTR_HPP