#include <iostream>
#include <memory>
void SomeFunc()
{
auto r1_cleanup = [](int* ptr){
std::cout << "r1_cleanup is called" << std::endl;
};
auto r2_cleanup = [](int* ptr){
std::cout << "r2_cleanup is called" << std::endl;
};
auto r3_cleanup = [](int* ptr){
std::cout << "r3_cleanup is called" << std::endl;
};
auto lv = std::unique_ptr<int, decltype(r1_cleanup)>(new int()/*::init1(...)*/, r1_cleanup);
auto cv1 = std::unique_ptr<int, decltype(r2_cleanup)>(new int()/*::init2(...)*/, r2_cleanup);
auto cv2 = std::unique_ptr<int, decltype(r3_cleanup)>(new int()/*::init3(...)*/, r3_cleanup);
/*...*/
}
int main() {
SomeFunc();
return 0;
}
ICAgICAgICAjaW5jbHVkZSA8aW9zdHJlYW0+CiAgICAgICAjaW5jbHVkZSA8bWVtb3J5PgogICAgIAogICAgIAogICAgICAgIHZvaWQgU29tZUZ1bmMoKQogICAgICAgIHsKICAgICAgICAgICAgYXV0byByMV9jbGVhbnVwID0gW10oaW50KiBwdHIpewogICAgICAgICAgICAgICAgc3RkOjpjb3V0IDw8ICJyMV9jbGVhbnVwIGlzIGNhbGxlZCIgPDwgc3RkOjplbmRsOwogICAgICAgICAgICB9OwogICAgIAogICAgICAgICAgICBhdXRvIHIyX2NsZWFudXAgPSBbXShpbnQqIHB0cil7CiAgICAgICAgICAgICAgICBzdGQ6OmNvdXQgPDwgInIyX2NsZWFudXAgaXMgY2FsbGVkIiA8PCBzdGQ6OmVuZGw7CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIAogICAgICAgICAgICBhdXRvIHIzX2NsZWFudXAgPSBbXShpbnQqIHB0cil7CiAgICAgICAgICAgICAgICBzdGQ6OmNvdXQgPDwgInIzX2NsZWFudXAgaXMgY2FsbGVkIiA8PCBzdGQ6OmVuZGw7CiAgICAgICAgICAgIH07CiAgICAgCiAgICAgICAgYXV0byBsdiA9IHN0ZDo6dW5pcXVlX3B0cjxpbnQsIGRlY2x0eXBlKHIxX2NsZWFudXApPihuZXcgaW50KCkvKjo6aW5pdDEoLi4uKSovLCByMV9jbGVhbnVwKTsKICAgICAgICBhdXRvIGN2MSA9IHN0ZDo6dW5pcXVlX3B0cjxpbnQsIGRlY2x0eXBlKHIyX2NsZWFudXApPihuZXcgaW50KCkvKjo6aW5pdDIoLi4uKSovLCByMl9jbGVhbnVwKTsKICAgICAgICBhdXRvIGN2MiA9IHN0ZDo6dW5pcXVlX3B0cjxpbnQsIGRlY2x0eXBlKHIzX2NsZWFudXApPihuZXcgaW50KCkvKjo6aW5pdDMoLi4uKSovLCByM19jbGVhbnVwKTsKICAgICAKICAgIC8qLi4uKi8KICAgICAgICB9CiAgICAgCiAgICAgICAgaW50IG1haW4oKSB7CiAgICAgICAgICAgIFNvbWVGdW5jKCk7CiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0=