C++中拷贝(复制)构造函数和赋值运算符重载函数

来源:互联网 发布:学生体质监测数据上报 编辑:程序博客网 时间:2024/05/18 21:49

        C++中拷贝构造函数和赋值运算符重载函数何时调用?

        先看下面的程序:

#include <iostream>using namespace std;class D{public:D(){cout<<"调用D的无参构造函数"<<endl;}D(const D &d){cout<<"调用D的拷贝构造函数"<<endl;}D & operator=(const D &d){cout<<"调用D的赋值运算符重载函数"<<endl;return *this;}virtual ~D(){cout<<"调用D的析构函数"<<endl;}};//这个辅助函数传进来的对象会复制一个副本,调用拷贝构造函数,返回时也会生成一个临时对象,调用拷贝构造函数,函数执行完成后还要调用两次析构函数D  fun(D d){cout<<"辅助函数"<<endl;return d;}int main(){D d;//调用D的构造函数D dd = fun(d);}

输出结果:

调用D的无参构造函数调用D的拷贝构造函数辅助函数调用D的拷贝构造函数调用D的析构函数调用D的析构函数调用D的析构函数请按任意键继续. . .

再看下面的程序:

#include <iostream>using namespace std;class D{public:D(){cout<<"调用D的无参构造函数"<<endl;}D(const D &d){cout<<"调用D的拷贝构造函数"<<endl;}D & operator=(const D &d){cout<<"调用D的赋值运算符重载函数"<<endl;return *this;}virtual ~D(){cout<<"调用D的析构函数"<<endl;}};//这个辅助函数传进来的对象会复制一个副本,调用拷贝构造函数,返回时也会生成一个临时对象,调用拷贝构造函数,函数执行完成后还要调用两次析构函数D  fun(D d){cout<<"辅助函数"<<endl;return d;}int main(){D d , dd;//调用D的构造函数dd = fun(d);}

输出结果:

调用D的无参构造函数调用D的无参构造函数调用D的拷贝构造函数辅助函数调用D的拷贝构造函数调用D的析构函数调用D的赋值运算符重载函数调用D的析构函数调用D的析构函数调用D的析构函数请按任意键继续. . .
        一句话总结:拷贝构造函数只用来初始化新对象,即还未初始化的对象。而赋值操作符只施行于已初始化的对象上。

0 0