首页
社区
课程
招聘
[原创]C++中临时对象的学习笔记
发表于: 2010-2-10 02:03 7257

[原创]C++中临时对象的学习笔记

2010-2-10 02:03
7257

在函数调用的时候,无论是参数为对象还是返回一个对象,都将产生一个临时对象。这个笔记就是为了学习这个临时对象的产生过程而写。
    本代码的详细例子见实例代码Ex.01

      Ok,先让我们定义一个类:

class CExample  
{
public:
	int m_nFirstNum;
	int m_nSecNum;

	int GetSum();
	bool SetNum(int nFirst, int nSec);
	CExample(){} 				// 空构造,不实现任何功能
	virtual ~CExample(){}			// 空析构

};
// 定义的函数实现部分
int CExample::GetSum()
{
	return m_nFirstNum+m_nSecNum;
}
CExample objExp1;
// 	00401393   lea         ecx,[ebp-18h]			//  第一个对象
// 	00401396   call        @ILT+20(CExample::CExample) 
// 	0040139B   mov         dword ptr [ebp-4],0		用来统计当前对象个数

CExample objExp2;
// 	004013A2   lea         ecx,[ebp-24h]			//  第二个对象
// 	004013A5   call        @ILT+20(CExample::CExample)
// 	004013AA   mov         byte ptr [ebp-4],1

CExample objExp3;
// 	004013AE   lea         ecx,[ebp-30h]			//  第三个对象
// 	004013B1   call        @ILT+20(CExample::CExample) 
// 	004013B6   mov         byte ptr [ebp-4],2
12:   CExample::CExample()
13:   {
00401540   push        ebp
00401541   mov         ebp,esp
00401543   sub         esp,44h
00401546   push        ebx
00401547   push        esi
00401548   push        edi
00401549   push        ecx             				        // 保存寄存器环境
0040154A   lea         edi,[ebp-44h]
0040154D   mov         ecx,11h
00401552   mov         eax,0CCCCCCCCh
00401557   rep stos    dword ptr [edi]
00401559   pop         ecx							         // 填充完CC以后,恢复ECX内容
0040155A   mov         dword ptr [ebp-4],ecx
0040155D   mov         eax,dword ptr [ebp-4]			         // 取到this指针
00401560   mov         dword ptr [eax],offset CExample::`vftable'   // 让this指针指向虚表
15:   }
00401566   mov         eax,dword ptr [ebp-4]
00401569   pop         edi
0040156A   pop         esi
0040156B   pop         ebx
0040156C   mov         esp,ebp
0040156E   pop         ebp
0040156F   ret
bool SetExpFun(CExample objExp)
{
	g_objExp.SetNum(objExp.m_nFirstNum, objExp.m_nSecNum);
	return true;
}
	SetExpFun(objExp1);

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 7
支持
分享
最新回复 (2)
雪    币: 270
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
2
顶bester陈,看来培训的效果不错
2010-2-10 22:21
0
雪    币: 386
活跃值: (46)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
参加什么培训了啊?vxk那个?
2010-2-10 23:00
0
游客
登录 | 注册 方可回帖
返回
//