zoukankan      html  css  js  c++  java
  • 类对象作为函数参数进行值传递

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

    首先先给出几个概念:

    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)
    {
        
    }

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

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

  • 相关阅读:
    迭代器,生成器的理解
    需求
    关于dom 0级 2级 3级事件的理解
    夯实前端基础
    前端面试题 收集
    前端易忘点,持续更新
    form target 文件上传
    ES6 symbol
    bzoj1260 [CQOI2007]涂色paint
    bzoj1083 [SCOI2005]繁忙的都市
  • 原文地址:https://www.cnblogs.com/scu-cjx/p/8592959.html
Copyright © 2011-2022 走看看