题目:分析一下这段程序的输出。帮忙解释一下为什么

//133.分析一下这段程序的输出(C++)#include<iostream>usingnamespacestd;classB{public:B(){cout<<"de... //133.分析一下这段程序的输出 (C++)
#include <iostream>
using namespace std;

class B
{
public:
B()
{
cout << "default constructor" << endl;
}
~B()
{
cout << "destructed" << endl;
}
B(int i) : data(i)
{
cout<< "constructed by parameter" << data <<endl;
}
private:
int data;
};

B Play( B b)
{
return b ;
}

int main(int argc, char* argv[])
{
B temp = Play(5);
return 0;
}

标准答案是:
constructed by parameter
destructed(释放临时变量)
destructed
展开
 我来答
梅姐儿童护理小知识
2012-07-23 · 超过54用户采纳过TA的回答
知道小有建树答主
回答量:259
采纳率:0%
帮助的人:98.8万
展开全部
Play(5); 这是个临时无名对象
调用 的是:
B(int i) : data(i)
{
cout<< "constructed by parameter" << data <<endl;
}

然后调用默认operator=(没有,编译器自动生成一个),将临时无名对象拷贝到temp,拷贝完,要析构。所以其实构造了两个对象,函数结束要析构temp,所以调用两次析构函数。
追问
既然是两个对象,那为什么temp不需要调用构造函数呢?还可以不调用构造函数就析构吗
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式