#include <iostream>
class Base {
public:
Base() {
std::cout << "Base()" << std::endl;
}
virtual ~Base() {
std::cout << "~Base()" << std::endl;
}
};
class Derived : public Base {
public:
Derived() {
std::cout << "Derived()" << std::endl;
}
~Derived() {
std::cout << "~Derived()" << std::endl;
}
};
int main()
{
std::cout << "{\n Derived a;\n}" << std::endl;
// 1
{
Derived a;
}
std::cout << "------------------------" << std::endl;
std::cout << "{\n Derived ary[2];\n}" << std::endl;
// 2
{
Derived ary[2];
}
std::cout << "------------------------" << std::endl;
std::cout << "{\n Base* p = new Derived;" << std::endl;
std::cout << " delete p;\n}" << std::endl;
// 3
{
Base* p = new Derived;
delete p;
}
std::cout << "------------------------" << std::endl;
std::cout << "{\n Base* ap = new Derived[2];" << std::endl;
std::cout << " delete[] ap;\n}" << std::endl;
// 4
{
Base* ap = new Derived[2];
delete[] ap;
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgQmFzZSB7CnB1YmxpYzoKICBCYXNlKCkgewogICAgc3RkOjpjb3V0IDw8ICJCYXNlKCkiIDw8IHN0ZDo6ZW5kbDsKICB9CiAgdmlydHVhbCB+QmFzZSgpIHsKICAgIHN0ZDo6Y291dCA8PCAifkJhc2UoKSIgPDwgc3RkOjplbmRsOwogIH0KfTsKCmNsYXNzIERlcml2ZWQgOiBwdWJsaWMgQmFzZSB7CnB1YmxpYzoKICBEZXJpdmVkKCkgewogICAgc3RkOjpjb3V0IDw8ICJEZXJpdmVkKCkiIDw8IHN0ZDo6ZW5kbDsKICB9CiAgfkRlcml2ZWQoKSB7CiAgICBzdGQ6OmNvdXQgPDwgIn5EZXJpdmVkKCkiIDw8IHN0ZDo6ZW5kbDsKICB9Cn07CgppbnQgbWFpbigpCnsKICBzdGQ6OmNvdXQgPDwgIntcbiAgRGVyaXZlZCBhO1xufSIgPDwgc3RkOjplbmRsOwoKICAvLyAxCiAgewogICAgRGVyaXZlZCBhOwogIH0KCiAgc3RkOjpjb3V0IDw8ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iIDw8IHN0ZDo6ZW5kbDsKICBzdGQ6OmNvdXQgPDwgIntcbiAgRGVyaXZlZCBhcnlbMl07XG59IiA8PCBzdGQ6OmVuZGw7CgogIC8vIDIKICB7CiAgICBEZXJpdmVkIGFyeVsyXTsKICB9CgogIHN0ZDo6Y291dCA8PCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA8PCBzdGQ6OmVuZGw7CiAgc3RkOjpjb3V0IDw8ICJ7XG4gIEJhc2UqIHAgPSBuZXcgRGVyaXZlZDsiIDw8IHN0ZDo6ZW5kbDsKICBzdGQ6OmNvdXQgPDwgIiAgZGVsZXRlIHA7XG59IiA8PCBzdGQ6OmVuZGw7CgogIC8vIDMKICB7CiAgICBCYXNlKiBwID0gbmV3IERlcml2ZWQ7CiAgICBkZWxldGUgcDsKICB9CgogIHN0ZDo6Y291dCA8PCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA8PCBzdGQ6OmVuZGw7CiAgc3RkOjpjb3V0IDw8ICJ7XG4gIEJhc2UqIGFwID0gbmV3IERlcml2ZWRbMl07IiA8PCBzdGQ6OmVuZGw7CiAgc3RkOjpjb3V0IDw8ICIgIGRlbGV0ZVtdIGFwO1xufSIgPDwgc3RkOjplbmRsOwoKICAvLyA0CiAgewogICAgQmFzZSogYXAgPSBuZXcgRGVyaXZlZFsyXTsKICAgIGRlbGV0ZVtdIGFwOwogIH0KfQo=