2012-05-06 26 views
25

कभी-कभी मैं एक डिफ़ॉल्ट कन्स्ट्रक्टर प्रदान नहीं करना चाहता, न ही मैं चाहता हूं कि संकलक मेरी कक्षा के लिए सिस्टम डिफॉल्ट कन्स्ट्रक्टर प्रदान करे।डिफ़ॉल्ट कन्स्ट्रक्टर को कैसे हटाएं?

class MyClass 
{ 
    public: 
    MyClass() = delete; 
}; 

लेकिन वर्तमान में मेरे लेक्चरर मुझे क्या करना है कि मेरे काम में अनुमति नहीं देता: सी ++ 11 में मैं की तरह बात कर सकते हैं। सवाल यह है: सी ++ 11 से पहले, क्या संकलक को स्पष्ट रूप से एक डिफ़ॉल्ट कन्स्ट्रक्टर प्रदान करने के लिए बताने का कोई तरीका है?

उत्तर

34

मैं इसे निजी बनाने कहेंगे ..

class MyClass 
{ 
private: 
    MyClass(); 
} 

की तरह कुछ और कोई नहीं (से कक्षा में ही या दोस्त कक्षाओं के बाहर) डिफ़ॉल्ट निर्माता कॉल करने के लिए सक्षम हो जाएगा। इसके अलावा, आपके पास कक्षा का उपयोग करने के लिए तीन विकल्प होंगे: या तो पैरामीटरयुक्त कन्स्ट्रक्टर प्रदान करने के लिए या इसे उपयोगिता वर्ग (केवल स्थिर कार्यों के साथ) के रूप में उपयोग करें या इस प्रकार के लिए एक मित्र वर्ग में एक कारखाना बनाने के लिए उपयोग करें।

+0

स्कॉट मेयर्स अपनी पुस्तक इफेक्टिव मॉडर्न सी ++ लिखते हैं, यह भी कि आप परिभाषा के बिना अपने निजी कन्स्ट्रक्टर को छोड़ सकते हैं। इससे आपको अपने डिफ़ॉल्ट कन्स्ट्रक्टर को मित्र वर्गों से आक्रमण से बचाने में मदद मिलेगी (लिंक त्रुटि फेंक दी जाएगी)। – MrPisarik

12

निश्चित रूप से। अपने स्वयं के कन्स्ट्रक्टर को परिभाषित करें, डिफ़ॉल्ट या अन्यथा।

आप इसे निजी के रूप में भी घोषित कर सकते हैं ताकि कॉल करना असंभव हो। दुर्भाग्यवश, जब तक आप इसे कॉल करने के लिए एक स्थिर कार्य प्रदान नहीं करते हैं, तब तक आपकी कक्षा पूरी तरह से अनुपयोगी होगी।

संबंधित मुद्दे