मान लीजिए मैं एक वर्ग फू के लिए एक निजी सूचक है कि एक बार:क्या यह एक चालक कन्स्ट्रक्टर में स्थिरता को दूर करने के लिए स्वीकार्य है?
class Foo
{
private:
Bar * bar;
public:
Foo() : bar (new Bar())
{}
~Foo()
{
delete bar;
}
};
सूचक bar
कभी नहीं एक अलग उदाहरण को सौंप दिया जाना चाहिए, तो यह समझ में सूचक ही बनाने के लिए बनाता है क्रम में const
मुझे (या एक मेंटेनर) भविष्य में ऐसा करने से रोकने के लिए:
private:
Bar * const bar;
मैं यह कर रहा पसंद जहाँ भी अवसर मिले।
मैं तो एक कदम निर्माता लिखना चाहते थे, तो यह कुछ इस तरह दिखेगा:
Foo (Foo && f) :
bar (f.bar)
{
f.bar = NULL; // uh oh; f.bar is const.
}
मैं या तो f.bar
की constness दूर कास्टिंग द्वारा या यह नहीं बना द्वारा "त्रुटि दूर जाने" कर सकते हैं पहली जगह में बांधो। इनमें से कोई भी चीज नहीं है जो मैं करना चाहता हूं। मैं पूरी तरह से कॉन्स को नहीं हटाऊंगा क्योंकि यह किसी कारण से है। दूसरी ओर, मेरे लिए स्थिरता रिंग अलार्म घंटी कास्टिंग और कुछ ऐसा है जो मैं आमतौर पर नहीं करता हूं। मेरा सवाल है: क्या इसे इस तरह के एक चालक कन्स्ट्रक्टर के भीतर स्थिरता को दूर करने के लिए स्वीकार्य अभ्यास माना जाता है? क्या कोई बेहतर तरीका है जिसे मैंने नहीं माना है?
मुझे नहीं लगता कि मेरे सवाल यह वैसा ही है जैसा: Use const_cast to implement the move constructor
यदि आपको 'बार' को बदलने की आवश्यकता है तो स्पष्ट रूप से यह 'const' नहीं होना चाहिए। अपने डिजाइन के बारे में सावधानी से सोचें। – user657267
ऐसा लगता है कि आपकी कक्षा को चलने योग्य नहीं होना चाहिए। – juanchopanza
यहां const_cast का उपयोग अपरिभाषित व्यवहार है। –