#include <iostream>
using namespace std;
class IPureVirtualDestructor {
public:
virtual string description() const = 0;
virtual ~IPureVirtualDestructor() = 0;
};
inline IPureVirtualDestructor::~IPureVirtualDestructor() { }
class TestClass : public IPureVirtualDestructor {
string name;
public:
TestClass(const string &name) : name(name) {
cout << "Constructor: " << name << endl;
}
~TestClass() {
cout << "Destructor: " << name << endl;
}
string description() const {
return string("My name is: ") + name;
}
};
int main() {
IPureVirtualDestructor *test = new TestClass("Bob");
cout << "Using: " << test->description() << endl;
delete test;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgSVB1cmVWaXJ0dWFsRGVzdHJ1Y3RvciB7CnB1YmxpYzoKCXZpcnR1YWwgc3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3QgPSAwOwoJdmlydHVhbCB+SVB1cmVWaXJ0dWFsRGVzdHJ1Y3RvcigpID0gMDsKfTsKCmlubGluZSBJUHVyZVZpcnR1YWxEZXN0cnVjdG9yOjp+SVB1cmVWaXJ0dWFsRGVzdHJ1Y3RvcigpIHsgfQoKY2xhc3MgVGVzdENsYXNzIDogcHVibGljIElQdXJlVmlydHVhbERlc3RydWN0b3IgewoJc3RyaW5nIG5hbWU7CnB1YmxpYzoKCVRlc3RDbGFzcyhjb25zdCBzdHJpbmcgJm5hbWUpIDogbmFtZShuYW1lKSB7CgkJY291dCA8PCAiQ29uc3RydWN0b3I6ICIgPDwgbmFtZSA8PCBlbmRsOwoJfQoKCX5UZXN0Q2xhc3MoKSB7CgkJY291dCA8PCAiRGVzdHJ1Y3RvcjogIiA8PCBuYW1lIDw8IGVuZGw7Cgl9CgoJc3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3QgewoJCXJldHVybiBzdHJpbmcoIk15IG5hbWUgaXM6ICIpICsgbmFtZTsKCX0KfTsKCmludCBtYWluKCkgewoJSVB1cmVWaXJ0dWFsRGVzdHJ1Y3RvciAqdGVzdCA9IG5ldyBUZXN0Q2xhc3MoIkJvYiIpOwoJY291dCA8PCAiVXNpbmc6ICIgPDwgdGVzdC0+ZGVzY3JpcHRpb24oKSA8PCBlbmRsOwoJZGVsZXRlIHRlc3Q7CglyZXR1cm4gMDsKfQ==