类类型参数函数调用发生了什么

cpp 复制代码
class Foo{
public:
    int key;
    int val;
    Foo():key(0),val(0){
        cout<<"无参构造函数\n";
    }
    Foo(int k, int v):key(k),val(v){
        cout<<"有参构造函数\n";
    }
    ~Foo(){cout<<"析构函数\n";}
    Foo(const Foo& foc){
        this->key = foc.key;
        this->val = foc.val;
        cout<<"拷贝构造函数\n";
    }
};


Foo func(Foo foo){
    return foo;
}

int main() {
    Foo foopus(1,1);
    cout<<"\n";
    func(foopus);
}

调用func传入foo类型的参数调用几次构造函数,几次析构函数?

答:两次构造,两次析构。

第一次传入函数参数时,会调用拷贝构造函数,构造函数参数里的对象foo。

第二次,函数返回时,会返回一个临时变量,调用拷贝构造函数,从foo拷贝。

对应的有两次析构函数。

bash 复制代码
有参构造函数

拷贝构造函数
拷贝构造函数
析构函数
析构函数
析构函数
相关推荐
##学无止境##1 小时前
从0到1吃透Java负载均衡:原理与算法大揭秘
java·开发语言·负载均衡
Desirediscipline1 小时前
#define _CRT_SECURE_NO_WARNINGS 1
开发语言·数据结构·c++·算法·c#·github·visual studio
知识即是力量ol1 小时前
多线程并发篇(八股)
java·开发语言·八股·多线程并发
尘缘浮梦1 小时前
协程asyncio入门案例 1
开发语言·python
ShineWinsu2 小时前
对于C++中map和multimap的详细介绍
c++·面试·stl·笔试·map·红黑树·multimap
没有bug.的程序员2 小时前
Lombok 深度进阶:编译期增强内核、@Data 与 @Builder 逻辑博弈及工业级避坑实战指南
java·开发语言·python·builder·lombok·data·编译器增强
guygg882 小时前
基于人工神经网络的彩色图像恢复 MATLAB实现
开发语言·计算机视觉·matlab
m0_531237172 小时前
C语言-分支与循环语句练习2
c语言·开发语言·算法
懒惰成性的2 小时前
Java方法的使用
java·开发语言
Once_day3 小时前
GCC编译(3)常见编译选项
c语言·c++·编译和链接