Why derived class overloaded delete operator called?

85 Views Asked by At
#include <iostream>
using namespace std;
struct A 
{
    virtual ~A() {  cout << "~A ";};
    void operator delete(void* p) 
    {
        cout << "A :: operator delete" << endl;
    }
    
    void operator delete[](void* p) 
    {
        cout << "A :: operator delete[]" << endl;
    }
};
struct B : A 
{
    ~B(){ cout << "~B ";}
    void operator delete(void* p) 
    {
        cout << "B :: operator delete" << endl;
    }
    void operator delete[](void* p) 
    {
        cout << "B :: operator delete[]" << endl;
    }
};
int main() 
{
    A* ptr1 = new B;
    A* ptr2 = new B[2];
    delete ptr1;
    delete [] ptr2;
}

Output:

~B ~A B :: operator delete
~B ~A ~B ~A A :: operator delete[]

When deleting the base class pointer ptr1, the derived class delete operator method is invoked, however when deleting ptr2 (which holds the dynamic memory location of the derived class array), the base class delete operator method is used. Can anyone explain this behavior?

0

There are 0 best solutions below