#include <iostream>
#include <memory>
#include <string>
struct A
{
A(std::string const& str) : name(str) { std::cout << "A" << std::endl; }
virtual ~A() { std::cout << "~A" << std::endl; }
std::string name;
};
struct B : A
{
B(std::string const& s) : A(s) { std::cout << "B" << std::endl; }
~B() { std::cout << "~B" << std::endl; }
};
int main()
{
std::unique_ptr<A> obj(new B("not leaky"));
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgojaW5jbHVkZSA8c3RyaW5nPgoKc3RydWN0IEEKewogICAgQShzdGQ6OnN0cmluZyBjb25zdCYgc3RyKSA6IG5hbWUoc3RyKSB7IHN0ZDo6Y291dCA8PCAiQSIgPDwgc3RkOjplbmRsOyB9CiAgICB2aXJ0dWFsIH5BKCkgeyBzdGQ6OmNvdXQgPDwgIn5BIiA8PCBzdGQ6OmVuZGw7IH0KCiAgICBzdGQ6OnN0cmluZyBuYW1lOwp9OwoKc3RydWN0IEIgOiBBCnsKICAgIEIoc3RkOjpzdHJpbmcgY29uc3QmIHMpIDogQShzKSB7IHN0ZDo6Y291dCA8PCAiQiIgPDwgc3RkOjplbmRsOyB9CiAgICB+QigpIHsgc3RkOjpjb3V0IDw8ICJ+QiIgPDwgc3RkOjplbmRsOyB9Cn07CgppbnQgbWFpbigpCnsKICAgIHN0ZDo6dW5pcXVlX3B0cjxBPiBvYmoobmV3IEIoIm5vdCBsZWFreSIpKTsKCiAgICByZXR1cm4gMDsKfQo=