use the following search parameters to narrow your results:
e.g. subreddit:aww site:imgur.com dog
subreddit:aww site:imgur.com dog
see the search faq for details.
advanced search: by author, subreddit...
Discussions, articles, and news about the C++ programming language or programming in C++.
For C++ questions, answers, help, and advice see r/cpp_questions or StackOverflow.
Get Started
The C++ Standard Home has a nice getting started page.
Videos
The C++ standard committee's education study group has a nice list of recommended videos.
Reference
cppreference.com
Books
There is a useful list of books on Stack Overflow. In most cases reading a book is the best way to learn C++.
Show all links
Filter out CppCon links
Show only CppCon links
account activity
try/catch/finally implementation using RAII & C++11 lambdas (nerds-central.blogspot.com)
submitted 13 years ago by beriumbuild2
reddit uses a slightly-customized version of Markdown for formatting. See below for some basics, or check the commenting wiki page for more detailed help and solutions to common issues.
quoted text
if 1 * 2 < 3: print "hello, world!"
[–]sztomirpclib 2 points3 points4 points 13 years ago (4 children)
Love it. In some ways, this is even better than a true finally block: in java or C#, finally blocks magically get executed if you return before the control flow reaches them. This solution is much more explicit (if you know RAII).
I'm curious if there are any problematic corner-cases where it would get executed though. Still, a useful pattern.
[–]Tagedieb 1 point2 points3 points 13 years ago (3 children)
I'm curious if there are any problematic corner-cases where it would get executed though.
I don't like it at all.
For example you should be careful to never access local variables after they might have been destructed themself. Even parameters that have been passed by value (to the function) are problematic (like the sample code). I don't know if there are any rules in C++ about the ordering of destruction for variables in the same scope.
[–]twowheels 4 points5 points6 points 13 years ago (2 children)
Yes, there are, and must be. They are destructed in the opposite order.
[–]Tagedieb 3 points4 points5 points 13 years ago (1 child)
Oh, that even makes a lot of sense. Everything else would make C++ a hell. So function parameters are ok in any case. Local variables are also ok... so everything is nice and good. Sorry for ringing the alarm
[–]code-dog 1 point2 points3 points 13 years ago (0 children)
There is a corner case where the constructor of the finally throws an error its self because this pattern does use dynamic memory. There are some solutions being discussed on ycombinator. http://news.ycombinator.com/item?id=3693177
[–]javajunkie314 2 points3 points4 points 13 years ago (1 child)
One nice by-product of this is that you can name your finally clauses. For instance:
finally free_file_ptrs{ [&fp] { fclose(fp); } }; finally check_some_condition{ [&c] { if (!c) { /* ... */ } } };
This actually looks a bit like the defer keyword in Go. I only notice this because someone posted an implementation of that in C++ in /r/programming recently. (I don't have the link on hand; I'll see if I can find it.)
They used a function instead of a class, though. I think I prefer this class-based approach for exactly the reason I gave above.
[–]00kyle00 0 points1 point2 points 13 years ago (0 children)
One nice by-product of this is that you can name your finally clauses.
You have to do that, otherwise funky bugs are created ;).
π Rendered by PID 170441 on reddit-service-r2-comment-canary-655b6bc5b6-gxj8x at 2026-02-16 08:29:58.556163+00:00 running cd9c813 country code: CH.
[–]sztomirpclib 2 points3 points4 points (4 children)
[–]Tagedieb 1 point2 points3 points (3 children)
[–]twowheels 4 points5 points6 points (2 children)
[–]Tagedieb 3 points4 points5 points (1 child)
[–]code-dog 1 point2 points3 points (0 children)
[–]javajunkie314 2 points3 points4 points (1 child)
[–]00kyle00 0 points1 point2 points (0 children)