メモリの管理用ライブラリに対応するヘッダファイルは以下の通りです。
メモリの確保・解放を行う関数を定義します。
_ec2p_new_handler変数に例外処理関数のアドレスを設定することにより、メモリ確保に失敗した場合、例外処理を実行することができます。
_ec2p_new_handlerはstatic変数で、初期値はNULLです。このハンドラを使用することにより、リエントラント性は失われます。
例外処理関数に要求される動作:
|
|
|
型
|
new_handler
|
void型を返す関数へのポインタ型です。
|
変数
|
_ec2p_new_handler
|
例外処理関数へのポインタです。
|
関数
|
void* operator new(size_t size)
|
size分の領域を確保します。
|
void* operator new[ ](size_t size)
|
size分の配列領域を確保します。
|
void* operator new(
size_t size, void* ptr)
|
ptrの指している領域を記憶領域として割り当てます。
|
void* operator new[ ](
size_t size, void* ptr)
|
ptrの指している領域を配列領域として割り当てます。
|
void operator delete(void* ptr)
|
領域を解放します。
|
void operator delete[ ](void* ptr)
|
配列領域を解放します。
|
new_handler set_new_handler(
new_handler new_P)
|
_ec2p_new_handlerに例外処理関数アドレス(new_P)を設定します。
|
void* operator new(size_t size)
|
sizeバイト分の領域を割り当てます。
領域割り当てに失敗し、かつnew_handlerが設定されていれば、new_handlerを呼び出します。
リターン値は次のとおりです。
領域確保に成功した場合 :void型へのポインタ
領域確保に失敗した場合 :NULL
void* operator new[ ](size_t size)
|
size分の配列領域を確保します。
領域割り当てに失敗し、かつnew_handlerが設定されていれば、new_handlerを呼び出します。
リターン値は次のとおりです。
領域確保に成功した場合 :void型へのポインタ
領域確保に失敗した場合 :NULL
void* operator new(size_t size, void* ptr)
|
ptrの指している領域を記憶領域として割り当てます。
リターン値はptrです。
void* operator new[ ](size_t size, void* ptr)
|
ptrの指している領域を配列領域として割り当てます。
リターン値はptrです。
void operator delete(void* ptr)
|
ptrが指す記憶領域を解放します。ptrがNULLのときは何もしません。
void operator delete[ ](void* ptr)
|
ptrが指す配列領域を解放します。ptrがNULLのときは何もしません。
new_handler set_new_handler(new_handler new_P)
|
_ec2p_new_handlerにnew_Pを設定します。
リターン値は_ec2p_new_handlerです。