#include <iostream>
class A
{
public:
A() {}
virtual ~A();
int aVar;
};
A::~A()
{
std::cout << "Call ~A()" << std::endl;
}
class B : public A
{
public:
B() {}
virtual ~B();
};
B::~B()
{
std::cout << "Call ~B()" << std::endl;
}
class C : public B
{
public:
C() {}
int cVar;
virtual ~C();
};
C::~C()
{
std::cout << "Call ~C() [cVar == " << cVar << "]" << std::endl;
}
int main()
{
A* aObj = new A;
aObj->aVar = 777;
B* bObj = new(aObj)B;
C* cObj1 = new(bObj)C;
//cObj1->cVar = 1;
C* cObj2 = new(bObj)C;
//cObj2->cVar = 2;
delete bObj;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgQQp7CnB1YmxpYzoKCUEoKSB7fQkKCXZpcnR1YWwgfkEoKTsKCWludCBhVmFyOwp9OwpBOjp+QSgpCnsKCXN0ZDo6Y291dCA8PCAiQ2FsbCB+QSgpIiA8PCBzdGQ6OmVuZGw7Cn0KCmNsYXNzIEIgOiBwdWJsaWMgQQp7CnB1YmxpYzoKCUIoKSB7fQoJdmlydHVhbCB+QigpOwp9OwpCOjp+QigpCnsKCXN0ZDo6Y291dCA8PCAiQ2FsbCB+QigpIiA8PCBzdGQ6OmVuZGw7Cn0KCmNsYXNzIEMgOiBwdWJsaWMgQgp7CnB1YmxpYzoKCUMoKSB7fQoJaW50IGNWYXI7Cgl2aXJ0dWFsIH5DKCk7Cn07CkM6On5DKCkKewoJc3RkOjpjb3V0IDw8ICJDYWxsIH5DKCkgW2NWYXIgPT0gIiA8PCBjVmFyIDw8ICJdIiA8PCBzdGQ6OmVuZGw7Cn0KCgppbnQgbWFpbigpCnsKCUEqIGFPYmogPSBuZXcgQTsKCWFPYmotPmFWYXIgPSA3Nzc7CgoJQiogYk9iaiA9IG5ldyhhT2JqKUI7CgkKCUMqIGNPYmoxID0gbmV3KGJPYmopQzsKCS8vY09iajEtPmNWYXIgPSAxOwoKCUMqIGNPYmoyID0gbmV3KGJPYmopQzsKCS8vY09iajItPmNWYXIgPSAyOwoJCQkKCWRlbGV0ZSBiT2JqOwoJCglyZXR1cm4gMDsKfQ==