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

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

拷贝构造函数
拷贝构造函数
析构函数
析构函数
析构函数
相关推荐
Mr_WangAndy10 分钟前
C++_chapter15_C++重要知识点_auto,function,bind,decltype
c++·decltype·bind·function·可调用对象
Maybyy18 分钟前
Chart.js图标绘制工具库
开发语言·javascript·ecmascript
万象.36 分钟前
QT基础及对象树的认识
c++·qt
1***s63237 分钟前
Python爬虫反爬策略,User-Agent与代理IP
开发语言·爬虫·python
柒儿吖40 分钟前
Qt for HarmonyOS 水平进度条组件开发实战
开发语言·qt·harmonyos
咖啡の猫1 小时前
Python的自述
开发语言·python
夏霞2 小时前
c# ASP.NET Core SignalR 客户端与服务端自动重连配置指南
开发语言·c#·asp.net
小张成长计划..3 小时前
【C++】2:cin和cout的介绍和使用,函数的缺省参数
c++
@老蝴3 小时前
Java EE - 常见的死锁和解决方法
java·开发语言·java-ee
再卷也是菜3 小时前
C++篇(17)哈希拓展学习
c++·哈希