Effective C++_笔记_条款05_了解C++默认编写并调用哪些函数
2014-05-19 23:18
267 查看
(整理自Effctive C++,转载请注明。整理者:华科小涛@http://www.cnblogs.com/hust-ghtao/)
直接上代码:
[/code]
如果你写了这样一个空类,你没有声明任何函数,编译器会声明一个default构造函数、copy构造函数、copy赋值操作符和一个析构函数。相当于你写下:
[/code]
这些函数的作用:
(1)default构造函数和析构函数:主要是给编译器一个地方用来放置“藏身幕后”的代码,像是调用base classes和non-static成员变量的构造函数和析构函数。注意:编译器产出的析构函数是non-virtual的,除非这个类的base class自身声明virtual析构函数。
(2)至于copy构造函数和copy赋值操作符,编译器创建的版本只是单纯地将来源对象的每个non-static成员变量拷贝到目标对象。
一般来说,copy赋值操作符和copy构造函数的行为基本上是一致的。但如果你打算在一个“内含reference成员”的class内支持copy赋值操作符,你必须自己定义它。因为要进行赋值操作,就相当于对reference赋值,但是C++并不允许让reference改指不同对象,reference初始化后就不能改变了;面对“内含const成员”的class,编译器的反应也是一样的,更改const成员是不合法的;还有一种情况:如果base class 将copy赋值操作符声明为private,编译器拒绝为其derived classes生成copy赋值操作符,编译器想要为派生类生成的copy赋值操作符处理base class 成分,但它无法调用派生类无权调用的成员函数。
总结:
(1)编译器可以自动为class创建default构造函数、copy构造函数、copy赋值操作符,以及析构函数。
直接上代码:
[code] class Empty{};
[/code]
如果你写了这样一个空类,你没有声明任何函数,编译器会声明一个default构造函数、copy构造函数、copy赋值操作符和一个析构函数。相当于你写下:
[code] class Empty
{
public:
Empty(){...} //default构造函数
Empty(const Empty& rhs){...} //copy构造函数
Empty& operator=(const Empty& rhs)//copy赋值操作符
~Empty(){...}//析构函数
};
[/code]
这些函数的作用:
(1)default构造函数和析构函数:主要是给编译器一个地方用来放置“藏身幕后”的代码,像是调用base classes和non-static成员变量的构造函数和析构函数。注意:编译器产出的析构函数是non-virtual的,除非这个类的base class自身声明virtual析构函数。
(2)至于copy构造函数和copy赋值操作符,编译器创建的版本只是单纯地将来源对象的每个non-static成员变量拷贝到目标对象。
一般来说,copy赋值操作符和copy构造函数的行为基本上是一致的。但如果你打算在一个“内含reference成员”的class内支持copy赋值操作符,你必须自己定义它。因为要进行赋值操作,就相当于对reference赋值,但是C++并不允许让reference改指不同对象,reference初始化后就不能改变了;面对“内含const成员”的class,编译器的反应也是一样的,更改const成员是不合法的;还有一种情况:如果base class 将copy赋值操作符声明为private,编译器拒绝为其derived classes生成copy赋值操作符,编译器想要为派生类生成的copy赋值操作符处理base class 成分,但它无法调用派生类无权调用的成员函数。
总结:
(1)编译器可以自动为class创建default构造函数、copy构造函数、copy赋值操作符,以及析构函数。
相关文章推荐
- Effective C++学习笔记 条款05:了解C++默默编写并调用的哪些函数
- Effective C++ -----条款05:了解C++默默编写并调用哪些函数
- 读书笔记《Effective c++》 条款05 了解c++默默编写并调用哪些函数
- Effective c++学习笔记——条款5:了解C++默默编写并调用哪些函数
- Effective C++:条款05:了解C++默默编写并调用哪些函数
- 《Effective C++》学习笔记条款05了解C++默默编写并调用哪些函数
- Effective C++ 条款05:了解C++编写并调用哪些函数
- Effective C++学习5 条款05:了解C++默默编写并调用了哪些函数
- [Effective C++]条款05 了解C++默默编写并调用哪些函数
- 条款05:了解C++默认编写调用哪些函数
- Effective C++ 05 了解C++默默编写并调用哪些函数 笔记
- effective c++ 条款05 了解C++默默编写和调用了哪些函数
- 条款05:了解C++默默编写并调用哪些函数
- 《Effect C++》学习------条款05:了解C++默默编写并调用哪些函数
- Effective C++ 条款5 了解C++默默编写并调用哪些函数
- [effictive c++]条款05 了解c++默默编写并调用哪些函数
- 条款05:了解C++默默编写并调用哪些函数(Know what functions C++ silently writes and calls.)
- Effective C++ 05:了解C++默默编写并调用哪些函数
- 条款05:了解C++默默编写并调用哪些函数
- 条款05:了解C++默默编写并调用哪些函数