#include <iostream>
#include <algorithm>
#include <memory>
#include <functional>
struct OBJ
{
OBJ()
{
std::cout << __PRETTY_FUNCTION__ << '\n';
}
~OBJ()
{
std::cout << __PRETTY_FUNCTION__ << '\n';
}
};
class client
{
private:
struct deleter
{
deleter(client *pThis) : pThis(pThis) {}
void operator()(OBJ* p) { pThis->del_obj(p); }
private:
client *pThis;
};
void del_obj(OBJ* p)
{
delete p;
}
std::unique_ptr<OBJ, deleter> objptr;
public:
client() : objptr(new OBJ, deleter(this))
{
}
};
int main()
{
client cli;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8bWVtb3J5PgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KCnN0cnVjdCBPQkoKewogICAgT0JKKCkKICAgIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgX19QUkVUVFlfRlVOQ1RJT05fXyA8PCAnXG4nOwogICAgfQoKICAgIH5PQkooKQogICAgewogICAgICAgIHN0ZDo6Y291dCA8PCBfX1BSRVRUWV9GVU5DVElPTl9fIDw8ICdcbic7CiAgICB9Cn07CgoKY2xhc3MgY2xpZW50CnsKcHJpdmF0ZToKICAgIHN0cnVjdCBkZWxldGVyCiAgICB7CiAgICAgICAgZGVsZXRlcihjbGllbnQgKnBUaGlzKSA6IHBUaGlzKHBUaGlzKSB7fQogICAgICAgIHZvaWQgb3BlcmF0b3IoKShPQkoqIHApIHsgcFRoaXMtPmRlbF9vYmoocCk7IH0KICAgICAgICAKICAgIHByaXZhdGU6CiAgICAgICAgY2xpZW50ICpwVGhpczsKICAgIH07CgogICAgdm9pZCBkZWxfb2JqKE9CSiogcCkKICAgIHsKICAgICAgICBkZWxldGUgcDsKICAgIH0KICAgIAogICAgc3RkOjp1bmlxdWVfcHRyPE9CSiwgZGVsZXRlcj4gb2JqcHRyOwogICAgCnB1YmxpYzoKICAgIGNsaWVudCgpIDogb2JqcHRyKG5ldyBPQkosIGRlbGV0ZXIodGhpcykpCiAgICB7CiAgICB9Cn07CgppbnQgbWFpbigpCnsKICAgIGNsaWVudCBjbGk7Cn0=