#include <cstdio>
struct Sub
{
char member;
Sub() { std::printf("Sub()\n"); }
~Sub() { std::printf("~Sub()\n"); }
void *operator new(std::size_t size) { throw "fuck"; }
void operator delete(void *p) { throw "fuck"; }
};
struct A
{
char member;
Sub sub;
A() { std::printf("A()\n"); }
~A() { std::printf("~A()\n"); }
void *operator new(std::size_t size)
{
std::printf("A::operator new(%zu)\n", size);
return ::operator new(size);
}
void operator delete(void *p)
{
std::printf("A::operator delete\n");
::operator delete(p);
}
};
int main()
{
auto *pa = new A;
std::printf("----\n");
delete pa;
}
I2luY2x1ZGUgPGNzdGRpbz4KCnN0cnVjdCBTdWIKewogICAgY2hhciBtZW1iZXI7CgoJU3ViKCkgeyBzdGQ6OnByaW50ZigiU3ViKClcbiIpOyB9Cgl+U3ViKCkgeyBzdGQ6OnByaW50ZigiflN1YigpXG4iKTsgfQoKCXZvaWQgKm9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCBzaXplKSB7IHRocm93ICJmdWNrIjsgfQoJdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCAqcCkgeyB0aHJvdyAiZnVjayI7IH0KfTsKCnN0cnVjdCBBCnsKCWNoYXIgbWVtYmVyOwoKCVN1YiBzdWI7CgoJQSgpIHsgc3RkOjpwcmludGYoIkEoKVxuIik7IH0KCX5BKCkgeyBzdGQ6OnByaW50ZigifkEoKVxuIik7IH0KCgl2b2lkICpvcGVyYXRvciBuZXcoc3RkOjpzaXplX3Qgc2l6ZSkKCXsKCQlzdGQ6OnByaW50ZigiQTo6b3BlcmF0b3IgbmV3KCV6dSlcbiIsIHNpemUpOwoJCXJldHVybiA6Om9wZXJhdG9yIG5ldyhzaXplKTsKCX0KCgl2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkICpwKQoJewoJCXN0ZDo6cHJpbnRmKCJBOjpvcGVyYXRvciBkZWxldGVcbiIpOwoJCTo6b3BlcmF0b3IgZGVsZXRlKHApOwoJfQp9OwoKaW50IG1haW4oKQp7CglhdXRvICpwYSA9IG5ldyBBOwoJc3RkOjpwcmludGYoIi0tLS1cbiIpOwoJZGVsZXRlIHBhOwp9Cgo=