#include <iostream>
class Foo
{
int x;
public:
Foo() { std::cout << "Foo!\n"; }
virtual ~Foo() { std::cout << "~Foo!\n"; }
void *operator new(size_t size)
{
std::cout << "new Foo( " << size << " )!\n";
return ::operator new(size);
}
void operator delete(void *ptr)
{
std::cout << "delete Foo!\n";
::operator delete(ptr);
}
};
class Bar : public Foo
{
int y;
public:
Bar() { std::cout << "Bar!\n"; }
~Bar() { std::cout << "~Bar!\n"; }
};
int main()
{
Foo *foo = new Foo();
delete foo;
Bar *bar = new Bar();
delete bar;
}