#include <iostream>
#include <cstddef>
class Base_no_virt_dtor {
int a[10];
};
class Derived_no_virt_dtor : public Base_no_virt_dtor {
int b[10];
};
class Base_virt_dtor {
int c[10];
public:
virtual ~Base_virt_dtor() = default;
};
class Derived_virt_dtor : public Base_virt_dtor {
int d[10];
};
// replaceable usual deallocation functions
// (since C++14)
void operator delete ( void* ptr, std::size_t sz ) noexcept{
std::cout << "delete (ptr=" << ptr << ", sz=" << sz << ");\n";
}
int main(void) {
std::cout << "sizeof(Base_no_virt_dtor) = " << sizeof(Base_no_virt_dtor) << ";\n";
std::cout << "sizeof(Derived_no_virt_dtor) = " << sizeof(Derived_no_virt_dtor) << ";\n";
std::cout << "sizeof(Base_virt_dtor) = " << sizeof(Base_virt_dtor) << ";\n";
std::cout << "sizeof(Derived_virt_dtor) = " << sizeof(Derived_virt_dtor) << ";\n";
std::cout << std::endl;
{
Base_no_virt_dtor* baseptr_no_virt_dtor = new Derived_no_virt_dtor;
std::cout << "baseptr_no_virt_dtor = " << baseptr_no_virt_dtor << ";\n";
delete baseptr_no_virt_dtor;
}
std::cout << std::endl;
{
Base_virt_dtor* baseptr_virt_dtor = new Derived_virt_dtor;
std::cout << "baseptr_virt_dtor = " << baseptr_virt_dtor << ";\n";
delete baseptr_virt_dtor;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGRlZj4KCmNsYXNzIEJhc2Vfbm9fdmlydF9kdG9yIHsKICBpbnQgYVsxMF07Cn07CgpjbGFzcyBEZXJpdmVkX25vX3ZpcnRfZHRvciA6IHB1YmxpYyBCYXNlX25vX3ZpcnRfZHRvciB7CiAgaW50IGJbMTBdOwp9OwoKY2xhc3MgQmFzZV92aXJ0X2R0b3IgewogIGludCBjWzEwXTsKcHVibGljOgogIHZpcnR1YWwgfkJhc2VfdmlydF9kdG9yKCkgPSBkZWZhdWx0Owp9OwoKY2xhc3MgRGVyaXZlZF92aXJ0X2R0b3IgOiBwdWJsaWMgQmFzZV92aXJ0X2R0b3IgewogIGludCBkWzEwXTsKfTsKCi8vIHJlcGxhY2VhYmxlIHVzdWFsIGRlYWxsb2NhdGlvbiBmdW5jdGlvbnMKLy8gKHNpbmNlIEMrKzE0KQp2b2lkIG9wZXJhdG9yIGRlbGV0ZSAgKCB2b2lkKiBwdHIsIHN0ZDo6c2l6ZV90IHN6ICkgbm9leGNlcHR7CiAgc3RkOjpjb3V0IDw8ICJkZWxldGUgKHB0cj0iIDw8IHB0ciA8PCAiLCBzej0iIDw8IHN6IDw8ICIpO1xuIjsKfQoKaW50IG1haW4odm9pZCkgewogIHN0ZDo6Y291dCA8PCAic2l6ZW9mKEJhc2Vfbm9fdmlydF9kdG9yKSA9ICIgPDwgc2l6ZW9mKEJhc2Vfbm9fdmlydF9kdG9yKSA8PCAiO1xuIjsKICBzdGQ6OmNvdXQgPDwgInNpemVvZihEZXJpdmVkX25vX3ZpcnRfZHRvcikgPSAiIDw8IHNpemVvZihEZXJpdmVkX25vX3ZpcnRfZHRvcikgPDwgIjtcbiI7CiAgc3RkOjpjb3V0IDw8ICJzaXplb2YoQmFzZV92aXJ0X2R0b3IpID0gIiA8PCBzaXplb2YoQmFzZV92aXJ0X2R0b3IpIDw8ICI7XG4iOwogIHN0ZDo6Y291dCA8PCAic2l6ZW9mKERlcml2ZWRfdmlydF9kdG9yKSA9ICIgPDwgc2l6ZW9mKERlcml2ZWRfdmlydF9kdG9yKSA8PCAiO1xuIjsKICAKICBzdGQ6OmNvdXQgPDwgc3RkOjplbmRsOwogIAogIHsKICAgIEJhc2Vfbm9fdmlydF9kdG9yKiBiYXNlcHRyX25vX3ZpcnRfZHRvciA9IG5ldyBEZXJpdmVkX25vX3ZpcnRfZHRvcjsKICAgIHN0ZDo6Y291dCA8PCAiYmFzZXB0cl9ub192aXJ0X2R0b3IgPSAiIDw8IGJhc2VwdHJfbm9fdmlydF9kdG9yIDw8ICI7XG4iOwogICAgZGVsZXRlIGJhc2VwdHJfbm9fdmlydF9kdG9yOwogIH0KICAKICBzdGQ6OmNvdXQgPDwgc3RkOjplbmRsOwogIAogIHsKICAgIEJhc2VfdmlydF9kdG9yKiBiYXNlcHRyX3ZpcnRfZHRvciA9IG5ldyBEZXJpdmVkX3ZpcnRfZHRvcjsKICAgIHN0ZDo6Y291dCA8PCAiYmFzZXB0cl92aXJ0X2R0b3IgPSAiIDw8IGJhc2VwdHJfdmlydF9kdG9yIDw8ICI7XG4iOwogICAgZGVsZXRlIGJhc2VwdHJfdmlydF9kdG9yOwogIH0KICByZXR1cm4gMDsKfQ==