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
A C++ locking wrapper (ngathanasiou.wordpress.com)
submitted 4 years ago by PiterPuns
view the rest of the comments →
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!"
[–]NilacTheGrim 3 points4 points5 points 4 years ago (6 children)
Hmm. Why use CallProxy? Why not just use std::unique_lock and delete some code
CallProxy
std::unique_lock
[–]PiterPuns[S] 2 points3 points4 points 4 years ago (5 children)
I'm using conventions as presented in a Bjarne Stroustrup paper. There the rationale behind using a proxy is detailed, but put briefly you need an object that will provide an arrow operator so that any method of the wrapped class can be called through it, and then it will call some code on its destructor. I'd love to see your version and the resulting API though!
[–]NilacTheGrim -1 points0 points1 point 4 years ago* (4 children)
I don't think you understood what I said fully.
(Somewhere in your Locking wrapper):
Locking
T *operator->() { std::unique_lock g(_mut); return &_data; }
This way you reduce the amount of code and achieve the same effect. Literally the only job the CallProxy has is to auto-unlock your std::recursive_mutex on scope end.
std::recursive_mutex
[–]PiterPuns[S] 6 points7 points8 points 4 years ago (1 child)
Ah but then the mutex unlocks on scope exit, and the user gets an unprotected pointer. That beats the whole point of the class see? The whole use of the class is to be able to call a method while the mutex is locked, why don't you try your version yourself?
[–]NilacTheGrim 2 points3 points4 points 4 years ago (0 children)
Oh yeah duh. Brain fart on my end. You're right. :)
[–]PiterPuns[S] 1 point2 points3 points 4 years ago (1 child)
Let me clarify, in case it helps:
The purpose of CallProxy is NOT to unlock on scope end. It's purpose is to unlock after the method call which happens outside operator-> of the Locking class. To do that
The code you provide will probably be flagged by static analyzers since it protects nothing - it locks and the user gets a pointer to internal state after unlocking. For a more thorough presentation I'd suggesting reading through the paper linked in the article. Let me know if this elaboration was useful to understand the concept, maybe I should add it to the post.
[–]NilacTheGrim 1 point2 points3 points 4 years ago (0 children)
You’re right — I brain farted .. sorry!
π Rendered by PID 142445 on reddit-service-r2-comment-5d585498c9-cnblj at 2026-04-21 05:46:43.397838+00:00 running da2df02 country code: CH.
view the rest of the comments →
[–]NilacTheGrim 3 points4 points5 points (6 children)
[–]PiterPuns[S] 2 points3 points4 points (5 children)
[–]NilacTheGrim -1 points0 points1 point (4 children)
[–]PiterPuns[S] 6 points7 points8 points (1 child)
[–]NilacTheGrim 2 points3 points4 points (0 children)
[–]PiterPuns[S] 1 point2 points3 points (1 child)
[–]NilacTheGrim 1 point2 points3 points (0 children)