• 类对象作为函数参数进行值传递


    这个是今天踩到的坑,记录一下。

    首先先给出几个概念:

    1)类对象在创建时会调用构造函数,在释放是会调用析构函数;

    2)函数中的局部变量在函数返回后,会由于弹栈从而内存被释放;

    3)如果函数参数是采用值传递的方式传入类对象,则由于值传递的性质,先调用类复制构造函数产生一个临时对象,然后在函数返回后会调用类析构函数将该临时对象内存释放;

    直接贴测试代码吧:

    class A
    {
    public:
        A()
        {
            cout<<"class create"<<endl;
        }
        A(const A &a)
        {
            cout<<"class copy"<<endl;
        }
        ~A()
        {
            cout<<"class delete"<<endl;
        }
    };
    
    void func(A test)
    {
        
    }
    
    int main(void)
    {
        A a;
        func(a);
    }

    结果输出:

    很明显,一次copy是由于值传递调用复制构造函数导致,一次delete是由于func函数返回导致。

    所以在对类对象进行参数传递的过程中,采用引用传递是一个正确的方式。

    void func(A &test)
    {
        
    }

    其实这个坑也说明了一个问题,复制构造函数为什么是采用引用传递的形式,而不是采用值传递。假如采用值传递的方式,会导致什么样的后果?(会无限递归调用复制构造函数,当然

    实际过程中代码是不会通过编译的)

  • 相关阅读:
    C 语言学习 --3
    C 语言学习 --2
    C 语言学习 -1
    C 语言学习 说明
    神经网络5:循环神经网络1
    神经网络4:卷积神经网络学习 2
    神经网络3:神经网络学习 1
    神经网络2:卷积神经网络学习 1
    神经网络 1 : 卷积神经网络CNN 、 循环神经网络 RNN
    轮播swiper配置选项
  • 原文地址:https://www.cnblogs.com/scu-cjx/p/8592959.html
Copyright © 2020-2023  润新知