构造函数和复制构造函数的调用时机

关于构造函数和复制构造函数以及重载的复制操作何时会被调用,我做了一个小例子来进行测试。

#include <iostream>

using namespace std;

class AAA
{
public:
    AAA()
    {
        cout<<"constrctor"<<endl;
    }
    AAA(const AAA & a)
    {
        cout<<"copy constrctor"<<endl;
    }
    AAA(int i)
    {
        cout<<"paramter constrctor"<<endl;
    }

    AAA& operator =(const AAA & a)
    {
        cout<<"copy function"<<endl;
        return *this;
    }
};
int main()
{
    cout<<"a1:";
    AAA a1(3);
    cout<<"a2:";
    AAA a2 = AAA(4);
    cout<<"a3:";
    AAA a3=AAA();
    cout<<"a4:";
    AAA a4(a2);
    cout<<"a5:";
    AAA a5;
    a5=a3;
    cout<<"a6:";
    AAA a6=a5;
    cout<<"a7:";
    AAA *a7=new AAA(1);
    cout<<"a8:";
    AAA *a8=new AAA();
    return 0;
}

由此可以看出几点:
1、AAA a();AAA a=AAA();是完全等价的(当然AAA a(1);AAA a=AAA(1);也是相同的);
2、对于
AAA a5;
AAA a6=a5;

这种操作,实际上是等价于AAA a6(a5);,实际上是会调用复制构造函数。
3、使用new方法时返回的是一个指针。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值