मैंने देखा कि कन्स्ट्रक्टर वापस आने से पहले this
से eax
स्थानांतरित करेगा। यह एक वापसी मूल्य या कुछ और है?क्यों निर्माता इस सूचक को "वापस" करते हैं?
class CTest {
int val_;
public:
CTest() {
0093F700 push ebp
0093F701 mov ebp,esp
0093F703 sub esp,0CCh
0093F709 push ebx
0093F70A push esi
0093F70B push edi
0093F70C push ecx
0093F70D lea edi,[ebp-0CCh]
0093F713 mov ecx,33h
0093F718 mov eax,0CCCCCCCCh
0093F71D rep stos dword ptr es:[edi]
0093F71F pop ecx
0093F720 mov dword ptr [this],ecx
val_ = 1;
0093F723 mov eax,dword ptr [this]
0093F726 mov dword ptr [eax],1
}
0093F72C mov eax,dword ptr [this]
0093F72F pop edi
0093F730 pop esi
0093F731 pop ebx
0093F732 mov esp,ebp
0093F734 pop ebp
0093F735 ret
VS2012 डिबग मोड
मैंने पाया कि new
अपने "वापसी मान" का प्रयोग करेंगे। ऐसा लगता है कि if(operator new() == 0) return 0; else return constructor();
class CTest {
int val_;
public:
CTest() {
val_ = 1;
__asm {
mov eax, 0x12345678
pop edi
pop esi
pop ebx
mov esp,ebp
pop ebp
ret
}
}
};
int main() {
CTest *test = new CTest; // test == 0x12345678
return 0;
}
रचनाकार कुछ भी वापस नहीं करते हैं, वे केवल आपको बनाए गए वस्तु को आरंभ करने का अवसर देते हैं। –
यह एक जंगली अनुमान है, लेकिन मुझे लगता है कि यह सबक्लास के निर्माण का समर्थन करने के लिए है। – Mehrdad
यह एक कार्यान्वयन विस्तार है। प्रति सी ++ मानक कन्स्ट्रक्टर कुछ भी वापस नहीं करता है और आपको उस पर भरोसा नहीं करना चाहिए। [कुछ संबंधित एसओ चर्चा] (http://stackoverflow.com/questions/10356109/c-constructors-have-no-return-type-just-exactly-why) – Tony