一 简介
以类A为例。
1.1 拷贝构造函数
1.1.1 形式
A(const A&)
1.1.2 作用
首先,它是一个构造函数,所以是用于对象的初始化。其次,它构造对象的规则是通过拷贝各个成员变量完成。
1.2 重载operator=
1.2.1 形式
A& operator=(const A&)
1.2.2 作用
对于一个对象的赋值(注意,不是初始化,初始化调用的是拷贝构造函数而不是重载运算符)。
1.3 两者相同点
- 编译器都会提供默认的实现(即成员变量复制)
- 都用来构造"一样的"对象
二 编译器对拷贝构造函数的优化
2.1 当函数返回局部变量且是用于对对象初始化时
代码
#include <stdlib.h>
#include <iostream>
using namespace std;
class A
{
public:
int num;
A(int num):num(num){
cout<<"A constructor"<<endl;}
A(const A& a){
num = a.num;cout << "A copy constructor" << endl;}
~A(){
cout << "~A" << endl;}
};
A getA()
{
A a(5);
cout << "getA a&:" << &a << endl;
return a;
}
int main()
{
A a = getA();
cout << "main a&:" << &a << endl;
system("pause")