我试图了解新位置/删除位置的工作原理,因此编写了以下程序:

# 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实例),而delete调用了更少的次数。

有人可以在这里提出什么问题吗?

谢谢

最佳答案

您的编译出了点问题:

https://ideone.com/uegedB

在这里它仅被调用一次。

输出为:

Hello
Calling New:
Calling Delete:

也许其他事物在后台将其称为。

09-10 04:05