एक निर्माता आभासी नहीं हो सकता [c++]


Answers

कन्स्ट्रक्टर आभासी नहीं हो सकता क्योंकि मानक इसलिए कहता है।

मानक इसलिए कहते हैं क्योंकि यह समझ नहीं आता। एक आभासी निर्माता क्या होगा?

पॉलीमॉर्फिज़्म में वर्चुअल विधियों का उपयोग किया जाता है ... यदि आप ऑब्जेक्ट्स को अभी तक नहीं रखते हैं तो पॉलीमॉर्फिज़्म कैसे काम करेगा?

संकलन समय पर हमें ऑब्जेक्ट का सटीक प्रकार निर्दिष्ट करना चाहिए, ताकि कंपाइलर उस विशिष्ट प्रकार के लिए मेमोरी आवंटित कर सके।

समय को संकलित करने पर हमें सटीक प्रकार निर्दिष्ट करना चाहिए क्योंकि हम उस प्रकार के ऑब्जेक्ट चाहते हैं ... मैंने उनका विवरण बहुत भ्रामक पाया।

इसके अलावा, अनुच्छेद में यह नहीं कहता कि यह कारण है कि कन्स्ट्रक्टर आभासी नहीं हो सकते। यह बताता है कि वर्चुअल विधियों को कन्स्ट्रक्टर से क्यों नहीं बुला जाना चाहिए, लेकिन इसके बारे में यह है।

Question

इंटरनेट में सी ++ ट्यूटोरियल्स में से एक में, मुझे पता चला है कि कन्स्ट्रक्टर आभासी क्यों नहीं हो सकता

हम एक आभासी निर्माता घोषित नहीं कर सकते संकलन समय पर हमें ऑब्जेक्ट का सटीक प्रकार निर्दिष्ट करना चाहिए, ताकि कंपाइलर उस विशिष्ट प्रकार के लिए मेमोरी आवंटित कर सके।

क्या यह विवरण सही है?

मुझे विशेष रूप से वाक्यांश के साथ भ्रम हो रहा है: so that the compiler can allocate memory for that specific type




यह सही है, भले ही यह मेरी विनम्र राय में अंक याद किया।

कन्स्ट्रक्टर्स ने वर्चुअल डिस्पैचिंग की स्थापना की है, यानी वर्तमान वर्ग के कार्यों में सही संकेतक इंगित करें। अगर कन्स्ट्रक्टर वर्चुअल हो सकते हैं, तो पहले से वर्चुअल कन्स्ट्रक्टर स्थापित करेगा कौन? एक भयानक चिकन और अंडे की समस्या होगी।

हालांकि, "आभासी कन्स्ट्रक्टर" नामक मुहावरे मौजूद है, जिसमें क्लास का एक स्थिर सदस्य एक उपयुक्त वर्ग के साथ एक बेस क्लास पॉइंटर देता है:

class A {
    static A* create();
    virtual ~A();
};

class B : public A { ... };

A* A::create() { return new B(); }