简体   繁体   English

为什么我没有得到预期的 output 波纹管 function 过载?

[英]Why I am not getting the expected output for bellows function overloading?

This is the code example of overloading of operator new and operator delete.这是 operator new 和 operator delete 重载的代码示例。

my expected output is:我预期的 output 是:

Overloaded new  
The value is :10
Overloaded delete

But I am getting:但我得到:

Overloaded new  
The value is :10

#include <iostream>
#include <stdlib.h>
using namespace std;

void *operator new(size_t n)
{
    cout<<"Overloaded new" <<endl;
    void *ptr = malloc(n);
    return ptr;
}

void operator delete(void *p)
{
    cout<<"Overloaded delete"<<endl;
    free(p);
}

int main()
{    
    int *p = new (int);
    
    *p = 10;

    cout<<"The value is :"<<*p<<endl;

    delete p;

    return 0;
}

why is this happening can anyone explain?为什么会发生这种情况,谁能解释?

When replacing the global operator delete, you should provide two overloads替换全局运算符 delete 时,应提供两个重载

void operator delete(void *p) noexcept

and

void operator delete(void *p, size_t n) noexcept

In some situations it's unspecified which will be used.在某些情况下,未指定将使用哪个。

Source cppreferencecppreference

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM