1 /*========================== begin_copyright_notice ============================ 2 3 Copyright (C) 2019-2021 Intel Corporation 4 5 SPDX-License-Identifier: MIT 6 7 ============================= end_copyright_notice ===========================*/ 8 9 #pragma once 10 11 #include "Debug.h" 12 13 #ifdef __cplusplus 14 15 namespace iSTD 16 { 17 18 19 /*****************************************************************************\ 20 21 Function: 22 SafeDelete 23 24 Description: 25 Safe "delete ptr;" 26 27 Input: 28 Type &ptr - pointer to memory to delete 29 30 Output: 31 Type &ptr 32 33 \*****************************************************************************/ 34 template <class Type> SafeDelete(Type & ptr)35inline void SafeDelete( Type &ptr ) 36 { 37 if( ptr ) 38 { 39 #if defined( _DEBUG ) && !defined( NO_EXCEPTION_HANDLING ) 40 #if defined( __GNUC__ ) 41 try 42 { 43 delete ptr; 44 } 45 catch (...) 46 { 47 ASSERT(0); 48 } 49 #else // defined( __GNUC__ ) 50 __try 51 { 52 delete ptr; 53 } 54 __except (1) 55 { 56 ASSERT(0); 57 } 58 #endif // defined( __GNUC__ ) 59 #else // defined( _DEBUG ) && !defined( NO_EXCEPTION_HANDLING ) 60 delete ptr; 61 #endif // defined( _DEBUG ) && !defined( NO_EXCEPTION_HANDLING ) 62 ptr = 0; 63 } 64 }; 65 66 /*****************************************************************************\ 67 68 Function: 69 SafeDeleteArray 70 71 Description: 72 Safe "delete[] ptr;" 73 74 Input: 75 Type &ptr - pointer to memory to delete 76 77 Output: 78 Type &ptr 79 80 \*****************************************************************************/ 81 template <class Type> SafeDeleteArray(Type & ptr)82inline void SafeDeleteArray( Type &ptr ) 83 { 84 if( ptr ) 85 { 86 #if defined( _DEBUG ) && !defined( NO_EXCEPTION_HANDLING ) 87 #if defined( __GNUC__ ) 88 try 89 { 90 delete[] ptr; 91 } 92 catch (int e) 93 { 94 ASSERT(0); 95 } 96 #else // defined( __GNUC__ ) 97 __try 98 { 99 delete[] ptr; 100 } 101 __except (1) 102 { 103 ASSERT(0); 104 } 105 #endif // defined( __GNUC__ ) 106 #else // defined( _DEBUG ) && !defined( NO_EXCEPTION_HANDLING ) 107 delete[] ptr; 108 #endif // defined( _DEBUG ) && !defined( NO_EXCEPTION_HANDLING ) 109 ptr = 0; 110 } 111 }; 112 113 } // iSTD 114 115 #endif // __cplusplus 116