默默无闻构造和有名构造的区别

无名构造和有名构造的区别
我定义了一个自动的临界区类,
class AutoCriticalSection
{
private:
  CRITICAL_SECTION *f_lock;
  AutoCriticalSection(const AutoCriticalSection&);
  AutoCriticalSection& operator=(const AutoCriticalSection&);
public:
  AutoCriticalSection(CRITICAL_SECTION &cri){f_lock = &cri;EnterCriticalSection(f_lock);}  
  ~AutoCriticalSection(){LeaveCriticalSection(f_lock);}
};


如果我用
  AutoCriticalSection(f_clients_lock);

就会报编译错误,找不到合适的默认构造函数
而使用
  AutoCriticalSection(f_clients_lock);

就没有问题,
请教这两者有什么本质的区别?
构造函数

------解决方案--------------------
因为这句

AutoCriticalSection(f_clients_lock);

等同于

AutoCriticalSection f_clients_lock;

然后 AutoCriticalSection 没有默认构造函数。
如果你的编译器支持 c++11 uniform initialization, 可以使用这种语法。

AutoCriticalSection{f_clients_lock};

构造匿名临时对象。
------解决方案--------------------
  AutoCriticalSection(f_clients_lock);


其实是
  AutoCriticalSection f_clients_lock;//需要缺省构造函数