3 ms·
However your implementation based on std::function might allocate, which is then non-zero cost compared to normal exit statements. Better directly store the lam
by Matthias247 8y ago
However your implementation based on std::function might allocate, which is then non-zero cost compared to normal exit statements. Better directly store the lambda inside the class, which requires that to be generic (Finally<LambdaType>).
That can be hidden by using the class via a templated function which uses types interference:
auto cleanup_socket = make_scope_guard([&]{ close_socket(s); });
Searching for scope_guard yields lots of alternative implementations.
- frankzinger 8y agomake_* functions are no longer necessary in C++17 which adds "Class template argument deduction" [1]. You can now do std::pair p{"aaa", 123}; and Finally guard{[]{cleanup();}}; without specifying template arguments. [1] https://en.cppreference.com/w/cpp/language/class_template_argument_deduction https://en.cppreference.com/w/cpp/language/class_template_ar...
- Matthias247 8y agoThx, I wasn't aware about this feature yet!