一个关于临时对象的问题:

hemisphere 2005-03-28 04:30:04
各位高手好:
我有一个问题请教:
#include <iostream>
using namespace std;
class MyClass
{
public:
MyClass(const MyClass &)
{ cout << "Copy constructor "<<endl; }
MyClass()
{ cout << "Default constructor "<<endl; }
MyClass::~MyClass()
{
cout << "Destructor "<<endl;
}
};
MyClass foo(MyClass rv3)
{
return rv3;
}
int main()
{
MyClass rv1;
MyClass rv2 = foo(rv1);
cout << "Returned from foo "<<endl;
return 0;
}

输出结果如下:
Default constructor
Copy constructor
Copy constructor
Destructor -------------------是传值时产生的临时对象的析构???
Returned from foo
Destructor---------------------------是返回对象时产生的临时对象的析构???
Destructor------------------还是???
我想问一下,这里有三个析构函数,哪一个析构函数是?哪一个是返回对象时产生的临时对象所产生的析构?
为什么??
...全文
61 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
sharkhuang 2005-03-29
  • 打赏
  • 举报
回复
你传值了 传引用就没有
qfxx 2005-03-29
  • 打赏
  • 举报
回复
同意hs_guanqi(关七)的观点
另外在传递参数时尽量使用引用或指针作为参数
而不要使用值传递
MyClass foo(MyClass& rv3);
MyClass foo(MyClass* prv3);
hs_guanqi 2005-03-28
  • 打赏
  • 举报
回复
Default constructor 这是MyClass rv1
Copy constructor 这是rv1传递给foo函数时的拷贝函数
Copy constructor 这是foo返回rv3时的拷贝函数,没有临时对象
Destructor foo在这里返回,返回前析构临时对象
Returned from foo
Destructor rv2析构
Destructor rv1析构
其实,如果你想仔细研究的话,可以在析构函数中把this指针的值打印出来
把每个对象的指针打印出来,printf("rv1 is %p\n", &rv1);来对比。

23,223

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧