Solution46
NewDel.hpp
[詳解]
1 //=============================================================================
2 /// @file
3 /// 生成消滅演算子オーバーライド関数実装ヘッダファイル
4 ///
5 /// 生成消滅演算子オーバーライド関数実装ヘッダファイルです。
6 ///
7 /// $Id: NewDel.hpp 245 2019-03-20 15:03:41Z admin $
8 /// $Date: 2019-03-21 00:03:41 +0900 (2019/03/21 (木)) $
9 /// $Author: admin $
10 ///
11 /// @attention なし
12 
13 #pragma managed( push, off )
14 
15 //=============================================================================
16 // インクルードファイル
17 #include <NewDel.h>
18 #include <LibNewDel.h>
19 
20 //=============================================================================
21 // グローバル関数
22 //-----------------------------------------------------------------------------
23 // 生成演算子オーバロード関数
24 void* operator new( size_t uSize ) {
25  // 処理ブロック
26  void* result = nullptr;
27  do {
28  // メモリを確保する
29  void* pAddr = ::malloc( uSize );
30  if ( nullptr == pAddr ) {
31  // 失敗!
32  break;
33  }
34 
35  // 成功!
36  result = pAddr;
37 
38  // 生成消滅演算子ライブラリクラスに通知する
39  NewDelOperatorNew( pAddr, uSize, __FUNCTIONW__ );
40  } while ( false );
41 
42  // 実行結果を返す
43  return result;
44 }
45 
46 //-----------------------------------------------------------------------------
47 // 配列生成演算子オーバロード関数
48 void* operator new[]( size_t uSize ) {
49  // 処理ブロック
50  void* result = nullptr;
51  do {
52  // メモリを確保する
53  void* pAddr = ::malloc( uSize );
54  if ( nullptr == pAddr ) {
55  // 失敗!
56  break;
57  }
58 
59  // 成功!
60  result = pAddr;
61 
62  // 生成消滅演算子ライブラリクラスに通知する
63  NewDelOperatorNew( pAddr, uSize, __FUNCTIONW__ );
64  } while ( false );
65 
66  // 実行結果を返す
67  return result;
68 }
69 
70 //-----------------------------------------------------------------------------
71 // 消滅演算子オーバロード関数
72 void operator delete( void* pAddr ) {
73  // 処理ブロック
74  do {
75  // メモリアドレスを調べる
76  if ( nullptr == pAddr ) {
77  // 失敗!
78  break;
79  }
80 
81  // 生成メモリサイズを取得する
82  size_t uSize = ::_msize( pAddr );
83 
84  // メモリを解放する
85  ::free( pAddr );
86 
87  // 生成消滅演算子ライブラリクラスに通知する
88  NewDelOperatorDelete( pAddr, uSize, __FUNCTIONW__ );
89  } while ( false );
90 }
91 
92 //-----------------------------------------------------------------------------
93 // 配列消滅演算子オーバロード関数
94 void operator delete[]( void* pAddr ) {
95  // 処理ブロック
96  do {
97  // メモリアドレスを調べる
98  if ( nullptr == pAddr ) {
99  // 失敗!
100  break;
101  }
102 
103  // 生成メモリサイズを取得する
104  size_t uSize = ::_msize( pAddr );
105 
106  // メモリを解放する
107  ::free( pAddr );
108 
109  // 生成消滅演算子ライブラリクラスに通知する
110  NewDelOperatorDelete( pAddr, uSize, __FUNCTIONW__ );
111  } while ( false );
112 }
113 
114 #pragma managed( pop )
生成消滅演算子オーバーライド関数ヘッダファイル
#define NewDelOperatorDelete(...)
消滅演算子実行通知マクロ
Definition: LibNewDel.h:25
生成消滅演算子ライブラリヘッダファイル
#define NewDelOperatorNew(...)
生成演算子実行通知マクロ
Definition: LibNewDel.h:24