复制构造函数调用时机(知识点记录)

复制构造函数调用时机(知识点记录)

  • 测试代码:

    #include <iostream>
    using namespace std;
    
    class Point {
    public:
    	Point()
    	{
    		m_x = 0;
    		m_y = 0;
    	}
    	Point(int x,int y)
    	{
    		cout << "有参构造" << endl;
    		m_x = x;
    		m_y = y;
    	}
    	
    	Point(const Point& p)
    	{
    		cout << "拷贝构造" << endl;
    		m_x = p.m_x;
    		m_y = p.m_y;
    	}
    private:
    	int m_x, m_y;
    
    };
    Point fun1()
    {
    	Point a;
    	return a;
    }
    void fun2(Point a)
    {
    	return;
    }
    int main()
    {
    	Point a;
    	Point b(a);//拷贝构造函数调用1
    	Point c(1,1);
    	fun1();//拷贝构造函数调用2
    	fun2(a);//拷贝构造函数调用3
    	fun2(b);//同情况3
    	fun2(c);//同情况3
    
    	system("pause");
    }
    
  • 可以直接打断点调试,可以发现有以下三种情况会发生拷贝构造函数调用(均在代码中标出)

  • 情况一:定义一个对象时,以本类的另一个对象作为初始值,发生拷贝构造

  • 情况二:如果函数形参是类的对象,调用函数时,将使用实参对象初始化形参对象时发生拷贝构造

  • 情况三:如果函数的返回值是类的对象,函数执行完成返回主调函数时,将使用return语句中的对象初始化一个无名对象,传递给主调函数,此时发生拷贝构造,这种情况可以通过移动构造避免不必要的拷贝

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值