我正在阅读Scott Meyers' Effective C ++ 一书,我遇到了::operator new
和delete
超载问题。我试图自己重载new
和delete
,但delete
函数被调用两次,问题是什么?
以下是有问题的代码:
int ob=0; //counts how many objects are created via overloaded new
void* operator new(size_t size, string st)
{
cout<<st<<endl;
cout<<"this is overloaded version of new, new allocates "<<size<<endl;
ob++;
return malloc(size);
}
void operator delete(void * ptr)
{
free((void*)ptr);
ob--;
cout<<"end of destruction"<<endl;
}
int main()
{
int* ptr = new("hello world") int(5);
cout<<*ptr<<endl;
cout<<ob<<" objects exist"<<endl;
delete(ptr);
cout<<ob<<" objects exist"<<endl;
return 0;
}
因此,ob
的值为-1,为什么会这样?