拷贝构造函数调用次数(函数的返回值是类对象的时候)

2018-11-04  本文已影响0人  太平小小草

先看代码:

#include "stdafx.h"
#include<iostream>
using namespace std;
class CExample
{
private:
    int a;
public:
    //构造函数
    CExample(int b)
    {
        a=b;
        printf("constructor is called\n");
    }
    //拷贝构造函数
    CExample(const CExample & c)
    {
        a=c.a;
        printf("copy constructor is called\n");
    }
    //析构函数
    ~CExample()
    {
        cout<<"destructor is called\n";
    }
    void Show()
    {
        cout<<a<<endl;
    }
};

CExample g_fun()
{
    CExample temp(0);
    return temp;
}
int main()
{
    {
        CExample tt = g_fun();
    }
    getchar();
    return 0;
}

输出结果:


image.png

如果用下面的代码:

int main()
{
    {
        g_fun();
    }
    getchar();
    return 0;
}

输出结果:


image.png

疑问:为什么都是调用两遍析构函数,前面那个不是调用两遍拷贝构造函数,而是只调用一遍。析构函数也只是调用两遍?

之前我以为 return temp; 这句会调用一次拷贝构造函数,CExample tt =这句也会调用一次拷贝构造函数。

上一篇下一篇

猜你喜欢

热点阅读