1,编译器会自动声明的类的成员函数
在一个类中,如果你没有声明copy构造函数,copy assignment操作符,和析构函数以及任何形式的构造函数。C++编译器会为这个类声明上述函数的编译器版本的。它们都是public且inline的。而且只有这些函数被调用时,它们才会被编译器创建出来,即给出它们的定义式
例如:
class Empty{}; //一个空类
上面的声明和下面的声明一样
class Empty{
pulbic:
Empty() {...} //default构造函数
Empty(const Empty& rhs) {...} //copy构造函数
~Empty() {...} //析构函数
Empty& operator=(const Empty& rhs) {...} //copy assignment操作符
}
2,编译器创建的函数能完成什么工作
1) default构造函数和析构函数主要是给编译器提供了一个机制,让它调用base class和non-static成员变量的构造函数和析构函数
2) copy构造函数和copy assignment操作符,编译器版本只是单纯地将来源对象的每一个non-static成员变量拷贝到目标对象。
具体的过程就是针对类中对象成员调用这个对象的copy构造函数,对于内置类型、如int,则拷贝源对象的每一个bit来完成初始化
需要注要的是:
1) 如果你打算一个内含reference成员或者内含const成员的class中支持赋值操作(assignment),则必须自己定义copy assignment操作符函数。
2) 如果base class中的copy assignment操作符函数是private的,则编译器不会为其的派生类提供copy assignment操作符函数,因为派生类编译器版本的copy assignment操作符函数必须要调base class的copy assignment操作符函数,可是它是private,所有不能调用,所以编译器不会为这样的派生类提供copy assignment操作符函数。
总结:
编译器厅以暗自为class创建default构造函数,copy构造函数,copy assignment操作符,以及析构函数
本文讲解了C++中编译器如何自动声明类的成员函数,包括默认构造函数、拷贝构造函数、赋值操作符及析构函数,并讨论了它们的作用及限制。

被折叠的 条评论
为什么被折叠?



