00401050 push ebp
00401051 mov ebp,esp
00401053 push 0FFh
00401055 push offset __ehhandler$ fun@@YAXVCExample@@@Z (004133f9)
0040105A mov eax,fs:[00000000]
00401060 push eax
00401061 mov dword ptr fs:[0],esp
00401068 sub esp,40h
0040106B push ebx
0040106C push esi
0040106D push edi
0040106E lea edi,[ebp-4Ch]
00401071 mov ecx,10h
00401076 mov eax,0CCCCCCCCh
0040107B rep stos dword ptr [edi]
0040107D mov dword ptr [ebp-4],0; EBP = 1244868,以上为建立堆栈代码
26: printf("In F(CExample)\n");
00401084 push offset string "In F(CExample)\n" (0042501c)
00401089 call printf (00401320)
0040108E add esp,4
27: return ;
00401091 mov dword ptr [ebp-4],0FFFFFFFFh
00401098 lea ecx,[ebp+8]; EBP+8 = 1244876,是 Temp 的内存地址
; ECX 寄存器保存
0040109B call @ILT+5(CExample::~CExample) (0040100a); 调用析构函数,销毁 Temp 对象(生命期结束)
28: }
004010A0 mov ecx,dword ptr [ebp-0Ch]
004010A3 mov dword ptr fs:[0],ecx
004010AA pop edi
004010AB pop esi
004010AC pop ebx
004010AD add esp,4Ch
004010B0 cmp ebp,esp
004010B2 call __chkesp (00401780)
004010B7 mov esp,ebp
004010B9 pop ebp; 恢复EBP,EBP = 1245000
004010BA ret
下面重点分析一下调用 fun 函数时程序的工作机制:

执行“fun(A);”时,首先先调用拷贝构造函数,创建一个实体对象Temp,占8个字节长度的栈空间,内容是拷贝 A 的内容;然后再把对象 Temp 的内存地址压入 fun 函数的堆栈中,调用 fun 函数,当 fun 函数结束时,调用析构函数销毁 Temp 对象,从此 Temp 对象所占的栈空间被回收