#include <iostream>
using namespace std;
class VirtualDestructor {
public:
virtual ~VirtualDestructor() {};
};
class Foo : public VirtualDestructor {
public:
Foo() { _a = new int(10); }
~Foo() { delete _a; cout << "Foo destructor\n"; }
private:
int* _a;
};
class NoVirtualDestructor {
};
class Bar : public NoVirtualDestructor {
public:
Bar() { _a = new int(10); }
~Bar() { delete _a; cout << "Bar destructor\n"; }
private:
int* _a;
};
int main() {
// your code goes here
VirtualDestructor* vd = new Foo();
delete vd; // будет вызван деструктор Foo. Память под _a освободится
NoVirtualDestructor* nvd = new Bar();
delete nvd; // не будет вызван деструктор Bar. Память под _a останется. Утечка памяти
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgVmlydHVhbERlc3RydWN0b3IgewpwdWJsaWM6CiAgICB2aXJ0dWFsIH5WaXJ0dWFsRGVzdHJ1Y3RvcigpIHt9Owp9OwoKY2xhc3MgRm9vIDogcHVibGljIFZpcnR1YWxEZXN0cnVjdG9yIHsKcHVibGljOgoJRm9vKCkgeyBfYSA9IG5ldyBpbnQoMTApOyB9Cgl+Rm9vKCkgeyBkZWxldGUgX2E7IGNvdXQgPDwgIkZvbyBkZXN0cnVjdG9yXG4iOyB9CnByaXZhdGU6CglpbnQqIF9hOwp9OwoKY2xhc3MgTm9WaXJ0dWFsRGVzdHJ1Y3RvciB7Cn07CgpjbGFzcyBCYXIgOiBwdWJsaWMgTm9WaXJ0dWFsRGVzdHJ1Y3RvciB7CnB1YmxpYzoKCUJhcigpIHsgX2EgPSBuZXcgaW50KDEwKTsgfQoJfkJhcigpIHsgZGVsZXRlIF9hOyBjb3V0IDw8ICJCYXIgZGVzdHJ1Y3RvclxuIjsgfQpwcml2YXRlOgoJaW50KiBfYTsKfTsKCmludCBtYWluKCkgewoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJVmlydHVhbERlc3RydWN0b3IqIHZkID0gbmV3IEZvbygpOwoJZGVsZXRlIHZkOyAvLyDQsdGD0LTQtdGCINCy0YvQt9Cy0LDQvSDQtNC10YHRgtGA0YPQutGC0L7RgCBGb28uINCf0LDQvNGP0YLRjCDQv9C+0LQgX2Eg0L7RgdCy0L7QsdC+0LTQuNGC0YHRjwoJTm9WaXJ0dWFsRGVzdHJ1Y3RvciogbnZkID0gbmV3IEJhcigpOwoJZGVsZXRlIG52ZDsgLy8g0L3QtSDQsdGD0LTQtdGCINCy0YvQt9Cy0LDQvSDQtNC10YHRgtGA0YPQutGC0L7RgCBCYXIuINCf0LDQvNGP0YLRjCDQv9C+0LQgX2Eg0L7RgdGC0LDQvdC10YLRgdGPLiDQo9GC0LXRh9C60LAg0L/QsNC80Y/RgtC4CglyZXR1cm4gMDsKfQ==