关于复制构造函数的调用时机

来源:互联网 发布:python有哪些图形库 编辑:程序博客网 时间:2024/05/22 10:53

关于复制构造函数的调用时机
1.当用类的一个对象去初始化该类的另一个对象时。
2.如果函数的形参是类的对象,调用函数时,进行形参和实参结合时(只有进行值传递时才会调用复制构造函数,引用传递时则不会调用)
3.如果函数的返回值是类的对象,函数执行完成返回调用者时。
但是!根据编译器的不同会有不同的结果!

#include <iostream>using namespace std;class Point { public:    Point(int xx=0,int yy=0){        x=xx;        y=yy;        cout<<"Create Point"<<endl;    }    ~Point(){        cout<<"Delete Point"<<endl;    }    Point(Point &p)    {        x=p.x;        y=p.y;        cout<<"Copy Point"<<endl;    }private:    int x,y;};void fun1(Point p){    cout<<" Use  fun1"<<endl;}Point fun2(){    cout<<"Use fun2"<<endl;    Point a(1,2);    return a;}int main(int argc, char *argv[]){    Point a(4,5);    Point b=a;//第1种情况    fun1(b);//第2种情况    b=fun2();//第3种情况    return 0;}

输出结果:
Create Point
Copy Point
Copy Point
Use fun1
Delete Point
Use fun2
Create Point
Delete Point
Delete Point
Delete Point

根据结果可知,复制构造函数只调用了2次,比我们估计的次数要少2次,而构造函数却多调用了一次.这其中可能编译器已经帮我们做过了优化,所以结果并不与我们所想相符.

0 0
原创粉丝点击