A while age a colleague told me he spent lot of time debugging a race condition. The culprit turned out to be something like this:
void foo()
{
ScopedLoc
You should use a static code analyser such as Cppcheck. For the following code:
class a { };
void f() {
a();
}
cppcheck generates the following output:
$ cppcheck test.cpp
Checking test.cpp...
[test.cpp:4]: (error) instance of "a" object destroyed immediately
There are a wide variety of other common coding errors also detected.
(I'm a fairly new contributor to Cppcheck. I found it a couple of months ago and it's been fantastic working with it.)
If you're going to define a macro, I'd probably rather define this one:
#define GET_SCOPED_LOCK(name, mtx) ScopedLock name(mtx)
and stop creating objects other than via the macro.
Then rename ScopedLock
to ThisClassNameShouldNotAppearInUserCode
if that helps.