Calling local overload of operator new causes stack overflow due to infinite recursive calls but when same happens with local overload of operator delete, why global operator delete is called (hence avoiding the stack crash). Simple code goes like this-
class A {
public:
void * operator new(size_t n) {
//return new A();calls local overloaded version and stack overflows
return ::new A();
}
void operator delete(void* p)
{
delete(p);//why its calling global version?
//::delete(p);//calls global version
}
};
int main()
{
A *a = new A();
delete(a);
}
My question is why delete from overloaded operator delete doesn't call itself but the global operator delete?