全局重载new和delete运算符

时间:2020-10-16 03:30:56

标签: c++ class operator-overloading new-operator delete-operator

我试图全局重载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()函数的输出使我感到困惑。在我看来,好像每次将数组元素作为输入时,都会在堆上创建一个对象并立即将其删除。 请解释这种行为 输出

Output for Array of three elements

我也是第一次做这个概念。因此,如果我在理解概念上有误,请帮助我

0 个答案:

没有答案