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)35 inline 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)82 inline 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