调用拷贝构造函数的时机

来源:互联网 发布:steam数据扫号 编辑:程序博客网 时间:2024/05/17 07:35

调用拷贝构造函数的情形

在C++中,下面三种对象需要调用拷贝构造函数(有时也称“复制构造函数”):
1) 一个对象作为函数参数,以值传递的方式传入函数体;
2) 一个对象作为函数返回值,以值传递的方式从函数返回;
3) 一个对象用于给另外一个对象进行初始化(常称为赋值初始化);

#include<iostream>using namespace std;class Position{private:int x;int y;public:Position(){}Position(int x, int y) :x(x), y(y){cout << "Position(int x, int y), x = " << x << ", y = "<< y << endl;}~Position(){cout << "~Position(), x = " << x << ", y = " << y << endl;}Position(const Position&p){cout << "Position(const Position&p)" << endl;this->x = p.x;this->y = p.y;}Position & operator=(const Position&p){cout << "Position & operator=(const Position&p)" << endl;this->x = p.x;this->y = p.y;return *this;}};Position testCopyFunction(){Position p(1, 2);//调用构造函数return p;//返回调用拷贝构造函数把局部对象p复制给一个内存中分配的临时的匿名对象上作为函数的返回值//函数结束后释放p的内存,调用析构函数//场景4}int main(int argc, char* argv[]){Position p;p = testCopyFunction();//调用拷贝构造操作符完成复制//完成赋值后,临时变量的使命就完成了,调用析构函数释放临时变量的内存Position p1 = p;//场景一:Position p2(p1);//场景二://场景三是传参:略Position(101, 102);//调用完构造函数后立马调用析构函数Position p3 = Position(3,4);//相当于 Position p3(3,4)return 0;}



运行结果:

Position(int x, int y)
Position(const Position&p)
~Position()
Position & operator=(const Position&p)
~Position()

//----------------------------------

Position(const Position&p)
Position(const Position&p)
~Position()
~Position()
~Position()



0 0
原创粉丝点击