重载全局新/删除问题,C ++ gcc

时间:2014-09-20 02:07:14

标签: c++ gcc

我正在阅读Scott Meyers' Effective C ++ 一书,我遇到了::operator newdelete超载问题。我试图自己重载newdelete,但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,为什么会这样?

0 个答案:

没有答案