Copy elision कुछ परिस्थितियों में अतिरिक्त (संभावित रूप से महंगी) प्रतियों को रोकने के लिए अधिकांश कंपाइलरों द्वारा कार्यान्वित एक अनुकूलन है। इसलिए यदि आपके पास कुछ कोड है जो ऐसी वस्तुओं का निर्माण कर रहा है जिनका उपयोग नहीं किया जा रहा है या जिनके दुष्प्रभाव नहीं हैं,
उदाहरण
struct MyStruct { MyStruct() {} MyStruct(const MyStruct&) { std::cout << "Copied.\n"; } }; MyStruct f() { return MyStruct(); } int main() { std::cout << "Main\n"; MyStruct obj = f(); }
आउटपुट
आप कंपाइलर और सेटिंग्स के आधार पर निम्न में से कोई भी आउटपुट प्राप्त कर सकते हैं -
Main Main Copied Copied Main Copied
इसका मतलब है कि आपकी अपेक्षा से कम ऑब्जेक्ट बनाए जा सकते हैं, इसलिए आप एक विशिष्ट संख्या में कंस्ट्रक्टर्स और डिस्ट्रक्टर्स को बुलाए जाने पर भी भरोसा नहीं कर सकते। आपके पास कॉपी/मूव-कंस्ट्रक्टर्स या डिस्ट्रक्टर्स के अंदर क्रिटिकल लॉजिक नहीं होना चाहिए, क्योंकि आप उन्हें बुलाए जाने पर भरोसा नहीं कर सकते।