是否可以这样声明一个函数:
auto i = foo.GetLock();有效,但是
foo.GetLock();导致编译错误?
我的接口有一个返回ria型锁对象的方法,我想确保没有人决定只调用GetLock()就会锁住锁。
它曾经是这样的
class CSomethingOrElse : private CLockable
{
...
} foo;
CLocker<CSomethingOrElse> lock(foo);但是它对我的口味来说太冗长了,我真的很想使用auto。
发布于 2015-04-06 21:04:20
foo.GetLock();是一个表达式语句,所以任何有效的表达式都可以这样使用。你不能在编译时禁止它:你能得到的最好的结果就是一个警告。
假设您的对象在销毁时释放锁,没有将结果存储在变量中的调用应该不是大问题,因为锁将被立即获取和释放。
创建一个类似于您在解决方案中描述的守卫对象是正确的方法。事实上,C++的标准库与std::lock_guard采用类似的方式。
https://stackoverflow.com/questions/29471789
复制相似问题