रचनाकार शायद इसके लिए एक बुरा नाम हैं। यह व्यावहारिक रूप से पूर्व निर्मित वस्तुओं के लिए एक प्रारंभिक है। इसे चित्रित करने का सबसे आसान तरीका सी ++ रचनाकारों का उपयोग किये बिना समकक्ष निर्माण के लिए एक छद्म उदाहरण है।
कंस्ट्रक्टर्स
struct X {
int a;
X() {
a = -5;
}
};
int main() {
X* x1 = new X(); // X created as a "reference object".
X x2; // X created as a "value object" on the stack.
return x1->a - x2.a;
}
साथ
कंस्ट्रक्टर्स बिना
struct X {
int a;
void initialize() {
a = -5;
}
static X* create() {
X* res = (X*)malloc(sizeof(X));
res->initialize();
return res;
}
};
int main() {
X* x1 = X::create(); // New constructed heap-allocated X
X x2; // Stack-allocated X
x2.initialize(); // Manually initialized
return x1->a - x2.a;
}
अब, अगर आप कल्पना कर दूसरे उदाहरण में X::initialize
थे कि वापस जाने के लिए किए जाने के लिए कहते हैं, एक bool
सफलता या विफलता का संकेत है, क्या तुम करोगी समस्या होना। main()
में, अवांछित प्रोग्रामर X
के साथ समाप्त हो सकता है जिसे ठीक तरह से प्रारंभ नहीं किया गया है, जो अनिर्धारित व्यवहार (आमतौर पर हार्ड-डीबग क्रैश जो उत्पादन से पहले नहीं खोजा जा सकता है) का कारण बनता है।
यह मुख्य कारणों में से एक है कि क्यों रचनाकारों को विशेष बनाया जाता है। एक कन्स्ट्रक्टर से बाहर निकलने के लिए केवल दो तरीके सामान्य समापन के माध्यम से या अपवाद के माध्यम से होते हैं, जो होना चाहिए, फिर कॉलर (या स्टैक पर पारित) द्वारा संभाला जाना चाहिए। किसी भी मामले में, आप अनियमित वस्तुओं के साथ समाप्त होने से रोकते हैं।
अतिरिक्त नोट के रूप में, अप्रारंभीकृत वस्तुओं सी में कीड़े की अधिक सामान्य कारणों, जो इस तरह प्रोग्रामर मदद करने के लिए कुछ भी नहीं है में से एक हैं।
जिज्ञासा से बाहर, जब यह समझ बनाने के निर्माता लौट वस्तु यह निर्माण कर रही है के अलावा और कुछ है करने के लिए उपयोगी हो सकता है या यहाँ तक कि होगा? – kevin628
AFAIK यह नव निर्मित ऑब्जेक्ट देता है। –
कौन कहता है कि एक कन्स्ट्रक्टर एक समारोह है? (इस तथ्य के अलावा कि "विशेष सदस्य कार्य" पर मानक अनुभाग में वर्णित है) –