配置の新規作成/削除がどのように機能するかを理解しようとしているため、次のプログラムを作成しました。
# include <iostream>
# include <cstdlib>
using namespace std;
class Test {};
void * operator new (size_t size) throw (std::bad_alloc){
cout<<"Calling New:"<<endl;
return new (malloc(size)) Test() ;
}
void operator delete (void *ptr) throw () {
cout<<"Calling Delete:"<<endl;
free (ptr) ;
}
int main ()
{
cout<<"Hello"<<endl;
Test *ptr = new Test () ;
delete ptr ;
return 0;
}
上記のコードでは、以下の出力が得られます。
Calling New:
Calling New:
Calling New:
Calling New:
Calling New:
Calling New:
Calling Delete:
Calling New:
Calling New:
Calling New:
Calling New:
Calling New:
Calling New:
Calling Delete:
Hello
Calling New:
Calling Delete:
出力では、演算子 new が複数回呼び出され (Test のインスタンスが 1 つしか作成されていない場合でも)、delete が呼び出される回数が少ないことがわかります。
誰かがここで何が悪いのか提案してもらえますか?
ありがとう