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

 2023-09-13 阅读 17 评论 0

摘要:这个是今天踩到的坑,记录一下。 首先先给出几个概念: 1)类对象在创建时会调用构造函数,在释放是会调用析构函数; 函数必须有参数吗、2)函数中的局部变量在函数返回后,会由于弹栈从而内存被释放; 3)如果函数参

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

首先先给出几个概念:

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

 

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

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

转载于:https://www.cnblogs.com/scu-cjx/p/8592959.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/50684.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息