我遇到了这个示例类http://www.boost.org/doc/libs/1_49_0/libs/smart_ptr/sp_techniques.html#as_lock并且我在语法上苦苦挣扎。
class shared_lock
{
private:
shared_ptr<void> pv;
public:
template<class Mutex> explicit shared_lock(Mutex & m): pv((m.lock(), &m), mem_fn(&Mutex::unlock)) {}
};
我(相信我)理解除了这部分“(m.lock(),&m)”之外的所有内容。整个事情似乎是初始化智能指针的第一个参数。该复合语句的评估结果是什么?仅仅是m的地址吗?为什么将锁作为参数列表的一部分放置在那里(以及它是如何合法的)?相反,我会期待这样的声明:
template<class Mutex> explicit shared_lock(Mutex & m): pv(&m, mem_fn(&Mutex::unlock)) {m.lock();}
我的替代语句会改变功能吗?