मुझे अविश्वसनीय रूप से गुप्त शीर्षक के लिए खेद है।एक कन्स्ट्रक्टर में सदस्य प्रारंभिकरण का उपयोग करके एक स्पष्ट निर्माता के तर्क को संतुष्ट करना क्यों ठीक है?
मैं हर्ब सटर द्वारा "अधिक असाधारण सी ++" पढ़ रहा हूं, और मैं "गिनती सूचक" के उदाहरण में आया हूं, मैं पूरे कोड को पेस्ट नहीं करूंगा, लेकिन वह हस्ताक्षर के साथ एक स्पष्ट निर्माता का उपयोग करता है:
explicit countedPointer(P* obj): p(new impl(obj)) {}
इसके अलावा, उन्होंने एक वर्ग जो वर्ग के लिए एक निजी सदस्य के रूप में एक गिना सूचक वस्तु है, इस वर्ग के निर्माता में वाणी, वह अपने गिना सूचक initialises के रूप में इतना:
flagNth(n):pimpl_(new flagNthImpl(n)) {}
जहां, pimpl_ काउंटर पॉइंटर ऑब्जेक्ट है, यानी
countedPointer<flagNthImpl>pimpl_;
मैं इस कोड और main.cpp अंदर भागने की कोशिश की, अगर मैं निम्नलिखित मैं एक त्रुटि (जाहिर है, के बाद से निर्माता स्पष्ट है) मिल
int main(int argc, const char * argv[])
{
countedPointer<int> cp = new int(5);
}
मेरा प्रश्न है करने की कोशिश, इसके बजाय एक निर्माता की सदस्य प्रारंभिक सूची के अंदर ऐसा करना ठीक क्यों है? प्रारंभिकरण नियमित रूप से नियमित प्रारंभ से अलग है, और यदि हां, तो कैसे?
धन्यवाद!
'pimpl_ (नई flagNthImpl (एन))' 'के रूप में countedPointer सीपी में ही है (नई पूर्णांक (5))' ' –
NathanOliver
countedPointer cp = नई int (5),' एक काम, नहीं एक initialisation है ' गिनती सूचक सीपी (नया int (5)); 'वर्ग वाक्यविन्यास के समान है और काम करना चाहिए। –
djgandy
@djgandy यह निश्चित रूप से ** ** ** असाइनमेंट नहीं है। यह प्रारंभिक प्रतिलिपि है, लेकिन यह अभी भी ** प्रारंभिक ** है। – Angew