首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2013-08-13 
无名构造和有名构造的区别我定义了一个自动的临界区类,class AutoCriticalSection{private:CRITICAL_SECTI

无名构造和有名构造的区别
我定义了一个自动的临界区类,

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;//需要缺省构造函数

热点排行