2010-09-13 79 views
7

这两行奇怪的代码是什么意思?什么是“=删除”?

thread_guard(thread_guard const&) = delete; 

thread_guard& operator=(thread_guard const&) = delete; 

回答

11

=delete是C++ 0x的新功能。这意味着一旦用户使用这种功能,编译器应该立即停止编译并且抱怨“该函数被删除”(参见Bjarne Stroustrup的C++ 0x FAQ的defaulted and deleted functions -- control of defaults)。

thread_guard(thread_guard const&)是一个拷贝构造函数,而thread_guard& operator=(thread_guard const&)是一个赋值构造函数。因此这两条线共同禁用了thread_guard实例的复制。

+1

差不多。在未评估的上下文中“使用”删除的函数(例如,作为“decltype”的表达式)可以作为模板参数推理失败。这使编译器忽略模板。它不会使编译器停止编译。 – sellibitze 2010-09-13 20:34:20

10

这是用于禁用类的某些功能的新的C++ 0x语法。一个例子见wikipedia。在这里,您告诉类thread_guard既不可复制也不可分配。

+0

它也适用于其他功能。 – sellibitze 2010-10-18 19:53:59

相关问题