#include <iostream>
// sized class-specific deallocation functions
struct X {
static void operator delete(void* ptr, std::size_t sz)
{
std::cout << "custom delete for size " << sz << '\n';
::operator delete(ptr);
}
static void operator delete[](void* ptr, std::size_t sz)
{
std::cout << "custom delete for size " << sz << '\n';
::operator delete(ptr);
}
int i;
};
int main() {
X* p1 = new X;
delete p1;
X* p2 = new X[10];
delete[] p2;
std::cout << sizeof(X*) << '<<<\n';
}
I2luY2x1ZGUgPGlvc3RyZWFtPgovLyBzaXplZCBjbGFzcy1zcGVjaWZpYyBkZWFsbG9jYXRpb24gZnVuY3Rpb25zCnN0cnVjdCBYIHsKICAgIHN0YXRpYyB2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKiBwdHIsIHN0ZDo6c2l6ZV90IHN6KQogICAgewogICAgICAgIHN0ZDo6Y291dCA8PCAiY3VzdG9tIGRlbGV0ZSBmb3Igc2l6ZSAiIDw8IHN6IDw8ICdcbic7CiAgICAgICAgOjpvcGVyYXRvciBkZWxldGUocHRyKTsKICAgIH0KICAgIHN0YXRpYyB2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQqIHB0ciwgc3RkOjpzaXplX3Qgc3opCiAgICB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJjdXN0b20gZGVsZXRlIGZvciBzaXplICIgPDwgc3ogPDwgJ1xuJzsKICAgICAgICA6Om9wZXJhdG9yIGRlbGV0ZShwdHIpOwogICAgfQogICAgaW50IGk7Cn07CmludCBtYWluKCkgewogICAgIFgqIHAxID0gbmV3IFg7CiAgICAgZGVsZXRlIHAxOwogICAgIFgqIHAyID0gbmV3IFhbMTBdOwogICAgIGRlbGV0ZVtdIHAyOwogICAgIHN0ZDo6Y291dCA8PCBzaXplb2YoWCopIDw8ICc8PDxcbic7Cn0=