To be fair, ON_SCOPE_EXIT is quite nice. Its functionality is very simple and restricted and it's indispensable when one needs to do something simple, usually with non-C++ resources (like calling fclose on FILE*).
It's also easy to debug. Though I tend to spend much less time in a debugger when working with C++ code, all this strict typing pays off.
C++0x has lambdas so it's possible to write analog of 'defer' from Golang (indeed, Boost already has it).
Object-oriented design patterns in the kernel, part 1
Posted Jun 3, 2011 1:16 UTC (Fri) by Trelane (guest, #56877)
[Link]
Thanks to both of your for the info; I am learning a lot. Yet again LWN proves to be the only place where the comments have value. :)
Object-oriented design patterns in the kernel, part 1
Posted Jun 3, 2011 9:46 UTC (Fri) by cortana (subscriber, #24596)
[Link]
FYI, you can still use shared_ptr with FILE* (and probably any other C API that follows the same pattern.
shared_ptr<FILE> f (fopen ("whatever", "r"), fclose);
Now, fclose will be called whenever the last copy of that shared_ptr is destructed. No more single exit points, goto tricks, or leaning towers of if statements!
Object-oriented design patterns in the kernel, part 1
Posted Jun 3, 2011 12:30 UTC (Fri) by cmccabe (guest, #60281)
[Link]
That's pretty good, and it relies on things that are actually in the standard library. Thanks.
Object-oriented design patterns in the kernel, part 1
Posted Jun 3, 2011 14:19 UTC (Fri) by cortana (subscriber, #24596)
[Link]
This and std::vector are the best things in C++! :)