《Effective C++》学习笔记条款05了解C++默默编写并调用哪些函数

                                             条款05:了解C++默默编写并调用哪些函数


       如果你自己没有声明,编译器就会为类声明(编译器版本的)一个拷贝构造函数一个拷贝赋值操作符一个析构函数。此外如果你没有声明任何构造函数,编译器也会成为你声明一个默认构造函数。所有这些函数都是publicinline


       惟有当这些函数被需要(被调用),它们才会被编译器创建出来。即有需求,编译器才会创建它们


       默认构造函数和析构函数主要是给编译器一个地方用来放置“藏身幕后”的代码,像是调用基类和非静态成员变量的构造函数和析构函数(要不然它们该在哪里被调用呢??)。


       注意:编译器产生的析构函数是个non-virtual,除非这个类的基类自身声明有virtual析构函数。


       至于拷贝构造函数和拷贝赋值操作符,编译器创建的版本只是单纯地将来源对象的每一个非静态成员变量拷贝到目标对象。


       如一个类声明了一个构造函数(无论有没参数),编译器就不再为它创建默认构造函数。 


       编译器生成的拷贝赋值操作符:对于成员变量中有指针,引用,常量类型,我们都应考虑建立自己“合适”的拷贝赋值操作符。因为指向同块内存的指针是个潜在危险,引用不可改变,常量不可改变。


     请记住:

  • 编译器可以暗自为类创建默认构造函数、拷贝构造函数、拷贝赋值操作符,以及析构函数。   

你可能感兴趣的:(《Effective C++》学习笔记条款05了解C++默默编写并调用哪些函数)