1 /* 2 * PROJECT: ReactOS Automatic Testing Utility 3 * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+) 4 * PURPOSE: Template similar to std::auto_ptr for arrays 5 * COPYRIGHT: Copyright 2009 Colin Finck (colin@reactos.org) 6 */ 7 8 template<typename Type> 9 class auto_array_ptr 10 { 11 private: 12 Type* m_Ptr; 13 14 public: 15 typedef Type element_type; 16 17 /* Construct an auto_array_ptr from a pointer */ 18 explicit auto_array_ptr(Type* Ptr = 0) throw() 19 : m_Ptr(Ptr) 20 { 21 } 22 23 /* Construct an auto_array_ptr from an existing auto_array_ptr */ 24 auto_array_ptr(auto_array_ptr<Type>& Right) throw() 25 : m_Ptr(Right.release()) 26 { 27 } 28 29 /* Destruct the auto_array_ptr and remove the corresponding array from memory */ 30 ~auto_array_ptr() throw() 31 { 32 delete[] m_Ptr; 33 } 34 35 /* Get the pointer address */ 36 Type* get() const throw() 37 { 38 return m_Ptr; 39 } 40 41 /* Release the pointer */ 42 Type* release() throw() 43 { 44 Type* Tmp = m_Ptr; 45 m_Ptr = 0; 46 47 return Tmp; 48 } 49 50 /* Reset to a new pointer */ 51 void reset(Type* Ptr = 0) throw() 52 { 53 if(Ptr != m_Ptr) 54 delete[] m_Ptr; 55 56 m_Ptr = Ptr; 57 } 58 59 /* Simulate all the functionality of real arrays by casting the auto_array_ptr to Type* on demand */ 60 operator Type*() const throw() 61 { 62 return m_Ptr; 63 } 64 }; 65