C++ 11:delete关键词和一条《Effective C++》的过时条款
来源:互联网 发布:wps数据有效性 编辑:程序博客网 时间:2024/06/05 06:27
在Scott Meyers的名著《Effective C++》中的条款5(了解C++默默编写并调用了哪些函数)和条款6(若不想使用编译器自动生成的函数,就应该明确拒绝)中提到以下几点:
以一个简单的类为例:
class base{public:};
在没有定义任何构造函数的情况下
1、编译器会自动生成default构造函数
2、编译器会自动生成copy构造函数
3、编译器会自动重载copy assignment操作符
4、编译器会自动生成析构函数
也就是自动生成了以下的代码:
class base{public: //default构造函数 base() {} //拷贝构造函数 base(const base &rhs){} //析构函数 ~base(){} //重载‘=’运算符 base& operator=(const base& rhs){}};
有的时候我们并不想使用编译器自动生成的函数,于是在《Effective C++》条款6中,采用了以下的方式杜绝编译器自动生成的函数。
class base{public: ...private: //如果我们要拒绝重载‘=’运算符,就把它设置为私有 base& operator=(const base& rhs){}};
但是在C++11中,我们有了更好的杜绝编译器自动生成的函数的方式:delete
class base{public: ... //如果我们要拒绝重载‘=’运算符的默认函数,加上=delete即可 base& operator=(const base& rhs)=delete;};int main(){ base ba; base bb; ba = bb; //会出错,operator=重载已经被delete}
被delete掉的成员函数不但无法调用,而且也不能被子类继承和覆盖。
阅读全文
1 0
- C++ 11:delete关键词和一条《Effective C++》的过时条款
- Effective C++:条款5:对应的new和delete要采用相同的形式
- 《Effective C++》:条款50:了解new和delete的合理替换时机
- Effective C++——》条款16:成对使用new和delete时要采取相同的形式
- Effective C++:条款3:尽量用new和delete而不用malloc和free
- Effective C++:条款8: 写operator new和operator delete时要遵循常规
- 《Effective C++》学习笔记条款16 成对使用new和delete时要采取相同形式
- Effective C++:条款16:成对使用new和delete时要采取相同形式
- 《Effective C++》:条款51:编写new和delete时需固守常规
- 读书笔记《Effective C++》条款16:成对使用new和delete时要采取相同形式
- Effective C++——条款10条,条款11和条款12(第2章)
- Effective C++:条款01
- Effective C++:条款02
- Effective C++:条款03
- Effective C++:条款04
- Effective C++:条款05
- Effective C++:条款06
- Effective C++:条款07
- 图标输入框(一)
- Python 命令详解
- 个人总结44
- {转}Android点击两次Back键退出当前程序
- 迭代器
- C++ 11:delete关键词和一条《Effective C++》的过时条款
- nginx服务器配置支持https
- 4.15 反编译和文档生成器(略)
- set公共函数
- resultType和resultMap的区别
- 数据库学习笔记2
- 读《我编程,我快乐》——程序员职业规划之道
- 模块驱动添加字符设备驱动
- [TensorFlow学习手记] 3