मुझे पता है कि आरवीओ अधिकतर लागू होता है लेकिन क्या मैं उस पर भरोसा कर सकता हूं? मेरे पास एक ऐसा फ़ंक्शन है जो क्लास फ्लैगकॉन्टेनर का ऑब्जेक्ट बनाता है।रिटर्न मूल्य अनुकूलन और विनाशक कॉल
class FlagContainer {
public:
~FlagContainer() {
someItem->flag = true;
}
private:
Item * someItem;
}
public FlagContainer createFlagContainer() {
return FlagContainer();
}
कॉलर कंटेनर का उपयोग करने के बाद, ध्वज सेट किया जाना चाहिए। तो मैं इसे विनाशक के साथ कर सकता हूं।
{
FlagContainer container = createFlagContainer();
// do something with container
}
जब दायरे से बाहर, विनाशक को बुलाया जाएगा। लेकिन क्या मैं यह सुनिश्चित कर सकता हूं कि विनाशक को कभी भी CreateFlagContainer में नहीं बुलाया जाएगा? क्या इसे प्राप्त करने का कोई तरीका है?
मैं एवीआर जीसीसी 4.7.0 कंपाइलर का उपयोग करूंगा।
"मुझे पता है कि आरवीओ ..." क्षमा करें, * क्या * आपको वास्तव में पता है? "अधिकांशतः लागू" का अर्थ क्या है, और "अधिकांशतः लागू" पर भरोसा करने का क्या अर्थ होगा? – juanchopanza
आरवीओ ** ** ** लागू करने की आवश्यकता नहीं है। यह मानक द्वारा अस्तित्व में रहने की अनुमति है। C12+ 17 के बाद से इस मामले में –
आरवीओ की आवश्यकता है। एमएसवीसी, जीसीसी, क्लैंग हमेशा इस परिदृश्य में आरवीओ प्रदर्शन करेंगे ('-फनो-एलिइड-कन्स्ट्रक्टर' को छोड़कर)। – Simple