gpt4 book ai didi

c++ - 为什么析构函数被调用两次?

转载 作者:行者123 更新时间:2023-11-28 07:09:40 25 4
gpt4 key购买 nike

<分区>

#include <iostream>
using namespace std;

class A
{
public:
A() { cout << "A's constructor" << endl; }
~A() { cout << "A's destructor" << endl; }
};

class B
{
public:
operator A() const { return A(); }
};

void f(A q) {}

int main()
{
B d1;
f(d1);
return 0;
}

在运行代码之前,我希望它执行以下操作:对 f 的调用导致对类 B 中的转换器函数的调用,该函数返回一个临时对象。 q 的构造函数被调用,当 f 退出时,q 的析构函数被调用。我期望得到以下输出:

A 的构造函数
A 的析构函数

但我得到的输出是:

A 的构造函数
A的析构函数
A 的析构函数

因为有另一个析构函数,所以一定在某处创建了一个额外的对象。有人可以解释这里发生了什么吗?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com