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

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 复制代码
有参构造函数

拷贝构造函数
拷贝构造函数
析构函数
析构函数
析构函数
相关推荐
CHANG_THE_WORLD几秒前
Python 推导式详细教程
开发语言·python
民乐团扒谱机9 分钟前
【微科普】GN 算法:在网络的脉络中,寻找社群的边界
开发语言·算法·matlab·语言学·语义网络分析
jwybobo200711 分钟前
redis7.x源码分析:(9) 内存淘汰策略
linux·c++·redis
yaoxin52112317 分钟前
263. Java 集合 - 遍历 List 时选用哪种方式?ArrayList vs LinkedList
java·开发语言·list
骇客野人19 分钟前
java对象和JSON对象之间的转换关系
java·开发语言·json
lubiii_29 分钟前
Aircrack-ng工具使用原理与实操笔记
开发语言·网络·web安全·php
weixin_3077791332 分钟前
Jenkins Metrics 插件全解析:从数据采集到智能监控的实践指南
运维·开发语言·架构·jenkins
阿拉伯柠檬33 分钟前
实现一个异步操作线程池
开发语言·数据结构·c++·面试
半瓶榴莲奶^_^36 分钟前
后端Web进阶(AOP)
java·开发语言
raoxiaoya38 分钟前
ADK-Go:Golang开发AI Agent
开发语言·人工智能·golang