点击链接查看更多C++ 技巧 :Effective C++
在上一篇文章 C++编译器默默编写了哪些函数 中,我们了解到C++编译器默认生成了构造函数,析构函数,复制构造函数,赋值操作符 这四个函数。当你不需要这些函数的时候,就应该明确拒绝。比如单例模式中,我们设计的类是不允许复制和赋值的,那么就可以像下面这样写:
// C++11 写法
class Temp {
public:
Temp(); // 构造函数
~Temp(); // 析构函数
Temp Temp(Temp& temp) = delete; // 不生成复制构造函数
Temp &operator=(Temp& temp) = delete; // 不生成赋值操作符
}
// C++ 98 写法
class Temp {
public:
Temp(); // 构造函数
~Temp(); // 析构函数
private:
Temp Temp(Temp& temp); // 私有复制构造函数,类外无法访问
Temp &operator=(Temp& temp); // 私有赋值操作符,类外无法访问
}
可以看到 C++11 以后,可以通过 delete 关键字告知编译器不生成对应函数。而之前的版本,则需要通过trick方式,把对应函数声明为私有,此时复制构造函数和赋值操作符已经生成,不过在类外无法调用,达到了删除该函数的目的。
点击链接查看更多C++ 技巧 :Effective C++