| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 441 人关注过本帖
标题:调用返回值为对象的函数 跟踪 构造 复制函数执行细节
只看楼主 加入收藏
zhaijianqi
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-5-13
结帖率:0
收藏
已结贴  问题点数:5 回复次数:2 
调用返回值为对象的函数 跟踪 构造 复制函数执行细节
程序代码:
#include<iostream>
class TestConstructor
{
public:
TestConstructor()
{
std::cout<<"TestConstructor()"<<std::endl;
}
~TestConstructor()
{
std::cout<<"~TestConstructor()"<<std::endl;
}
TestConstructor(const TestConstructor& testObj)
{
std::cout<<"TestConstructor(const TestConstructor&)"<<std::endl;
}
TestConstructor& operator = (const TestConstructor& testObj)
{
std::cout<<"TestConstructor& operator = (const TestConstructor& testObj)"<<std::endl;
return *this;
}
};
TestConstructor testFunc()
{
TestConstructor testInFunc;
return testInFunc;
}
int main()
{

TestConstructor test1 = testFunc();
return 0;
}



}


输出结果为:
TestConstructor()
TestConstructor(const TestConstructor&)
~TestConstructor()
~TestConstructor()

我明白:第一条TestConstructor()是创建testFunc()中的对象   第二条输出TestConstructor(const TestConstructor&)
是 创建临时对象;   第三条~TestConstructor()是析构testFunc()中的对象;
后面就纳闷了: 返回到 TestConstructor test1 = testFunc();时,不是应该执行复制构造函数将临时对象复制给test1吗?怎么没显示TestConstructor(const TestConstructor&)?然后应该出现两个析构函数,一个析构临时对象,另一个析构test1吗?

搜索更多相关主题的帖子: 函数 跟踪 color 
2013-05-13 20:34
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:5 
第一条是 构造testFunc()中的testInFunc
第二条是 拷贝构造main()中的test1
第三条是 析构testFunc()中的testInFunc
第四题是 析构main()中的test1

2013-05-14 12:10
zhaijianqi
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-5-13
收藏
得分:0 
在执行return  testInFunc时,不是应该调用复制构造函数创建一个临时对象吗?
2013-05-14 14:03
快速回复:调用返回值为对象的函数 跟踪 构造 复制函数执行细节
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024380 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved