#include <cstddef>
#include <iostream>
struct widget
{
static void *operator new (std::size_t size)
{
std::cout << "widget::operator new (" << size << ")" << std::endl;
return ::operator new (size);
}
static void operator delete (void *addr, std::size_t size)
{
std::cout << "widget::operator delete (" << size << ")" << std::endl;
::operator delete (addr);
}
static void *operator new [] (std::size_t size)
{
std::cout << "widget::operator new [] (" << size << ")" << std::endl;
return ::operator new [] (size);
}
static void operator delete [] (void *addr, std::size_t size)
{
std::cout << "widget::operator delete [] (" << size << ")" << std::endl;
::operator delete [] (addr);
}
widget()
{
std::cout << "widget()" << std::endl;
}
~widget()
{
std::cout << "~widget()" << std::endl;
}
char padding[10];
};
int main(void)
{
widget *p;
p = new widget;
delete p;
p = new widget [3];
delete [] p;
return 0;
}