首页 > 解决方案 > 全局重载 new 和 delete 操作符

问题描述

我试图在全球范围内重载 new 和 delete 运算符。代码是:

void * operator new(size_t s)
    {
        cout<<"\nOverloaded new operator with size "<<s<<endl;
        void * ptr=::malloc(s);
        return  ptr;
    }
    void operator delete(void * ptr)
    {
        cout<<"\nOverloaded delete operator\n";
        free(ptr);
    }
class Array
{
    int * arr;
    int n;
public:

    Array(int x=0):n{x}
    {
        cout<<"\nConstructor called\n";
        arr= new int[n];
    }

    ~Array()
    {
        cout<<"\nDestructor called\n";
        delete[]arr;
    }
    void set_data()
    {
        cout<<"\nEnter elements:";
        for(int i=0;i<n;i++)
        {
            cin>>arr[i];
        }

    }
    void show_data()
    {
         for(int i=0;i<n;i++)
            cout<<arr[i]<<" ";
    }


};
int main()
{
    Array * a=new Array{3};
    a->set_data();
    a->show_data();
    delete a;


    return 0;

}

当我尝试使用 new 创建一个 Array 对象时,set_data() 函数的输出让我感到困惑。在我看来,好像每次将数组元素作为输入时,都会在堆上创建一个对象并立即删除。请解释这种行为输出

三元素数组的输出

我也是第一次做这个概念。所以如果我理解这个概念有误,请帮助我

标签: c++classoperator-overloadingnew-operatordelete-operator

解决方案


推荐阅读