কপি এলিশন (Copy Elision): কম্পাইলার অপ্টিমাইজেশন যা অপ্রয়োজনীয় কপি/মুভ কনস্ট্রাক্টর কল বাদ দেয়। নির্দিষ্ট পরিস্থিতিতে কম্পাইলার বাধ্যবশেই এটি প্রয়োগ করতে হয় (mandatory elision C++17-এ)।
উদাহরণ
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
অর্থ: আপনার কোডে কতগুলো অবজেক্ট বनेगा সেটি নিশ্চিত নয়। তাই কপি/মুভ কনস্ট্রাক্টর বা ডিস্ট্রাক্টরে ক্রিটিক্যাল লজিক রাখা উচিত নয় (যেমন লগিং, রিসোর্স কাউন্টিং)।
RVO (Return Value Optimization)
ফাংশন থেকে অবজেক্ট রিটার্ন করলে কলারের স্ট্যাক ফ্রেমে সরাসরি কনস্ট্রাক্ট করা (কপি ছাড়া)। C++17-এ গ্যারান্টিড (mandatory) NRVO (Named RVO) ছাড়া।
সুপারিশ: ভ্যালু রিটার্ন করুন, কম্পাইলার অপ্টিমাইজ করবে। std::move রিটার্ন স্টেটমেন্টে ব্যবহার করবেন না (RVO বাধা দেয়)।