#include <memory>
#include <iostream>
template <typename T>
struct Deleter
{
void operator()(T* t)
{
std::cout << "Deleter::oerator(): " << t << std::endl;
delete t;
}
};
struct A
{
A()
{
std::cout << "A::A()" << std::endl;
}
~A()
{
std::cout << "A::~A()" << std::endl;
}
};
int main(int argc, char const *argv[])
{
std::unique_ptr<A, Deleter<A>> ptr(new A);
return 0;
}
I2luY2x1ZGUgPG1lbW9yeT4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBEZWxldGVyCnsKCXZvaWQgb3BlcmF0b3IoKShUKiB0KQoJewoJCXN0ZDo6Y291dCA8PCAiRGVsZXRlcjo6b2VyYXRvcigpOiAiIDw8IHQgPDwgc3RkOjplbmRsOwoJCWRlbGV0ZSB0OwoJfQp9OwoKc3RydWN0IEEgCnsKCUEoKSAKCXsKCQlzdGQ6OmNvdXQgPDwgIkE6OkEoKSIgPDwgc3RkOjplbmRsOwoJfQoKCX5BKCkgCgl7CgkJc3RkOjpjb3V0IDw8ICJBOjp+QSgpIiA8PCBzdGQ6OmVuZGw7Cgl9Cn07CgppbnQgbWFpbihpbnQgYXJnYywgY2hhciBjb25zdCAqYXJndltdKQp7CglzdGQ6OnVuaXF1ZV9wdHI8QSwgRGVsZXRlcjxBPj4gcHRyKG5ldyBBKTsKCgkKCXJldHVybiAwOwp9