delete演算子オーバーロードについて
delete演算子オーバーロードする際、
デストラクタが呼び出される困っています。
例えば、
void* operator new(size_t size, const char* filename , int line , const char* funcname );
とnew演算子をグローバル定義します。
すると、意図通りnew演算子がCallされ、対応するコントラクタも
問題なくCallされます。
そして、上記new定義にペアとなるdelete演算子もグローバル定義します。
void operator delete(void* pMem, const char* filename , int line , const char* funcname );
通常どおりdeleteで呼び出してしまうと、標準のdeleteがcallされてしまうため、
#define MYELETE(s) operator delete( (void*)(s) , __FILE__ , __LINE__ , __FUNCTION__ )
上記のようなカスタムマクロを定義してCallしています。
オーバーロード定義されたアドレスがCallされるところまで、
意図通りなのですが、肝心のデストラクタがCallされません。
型が判明している場合、
単体でデストラクタを明示的に呼び出すことはできますが、
任意のポインタのデストラクタを明示的に呼び出す方法は
ありますでしょうか?
お礼
御回答ありがとうございます。 placement newは、new演算子関数に、引数を与える機能のようですね。 はじめて知りました。 今回の場合、bufの指すアドレスを、pが指すようにしているのだと分かりました。 (printf("%p", buf); と pring("%p", p); で表示されるアドレス値が同じでした。)