C++11增加了=delete修饰符,明确表达虽然声明了某函数,但是又禁止它们被使用的意思。本例中的拷贝构造函数和赋值运算符可以如下声明:
这样做最直接的效果就是,test方法本身就会发生编译错误,而不需要等到test方法真正被使用时。
class DiagClient
{
public:
DiagClient(void);
virtual ~DiagClient(void);
/// @brief Deleted copy constructor and operator
DiagClient(const DiagClient &) = delete;
DiagClient &operator=(const DiagClient &) = delete;
};
如果类没有定义拷贝构造函数和拷贝赋值运算符,编译器会自动为类创建这些函数(如果它们被调用的话)。