默默无闻构造和有名构造的区别
无名构造和有名构造的区别
我定义了一个自动的临界区类,
如果我用
就会报编译错误,找不到合适的默认构造函数
而使用
就没有问题,
请教这两者有什么本质的区别?
------解决方案--------------------
因为这句
等同于
然后 AutoCriticalSection 没有默认构造函数。
如果你的编译器支持 c++11 uniform initialization, 可以使用这种语法。
构造匿名临时对象。
------解决方案--------------------
其实是
我定义了一个自动的临界区类,
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;//需要缺省构造函数