Rule of Three (C++98/03)
যদি ক্লাসে যেকোনো একটিই এক্সপ্লিসিটলি ডিফাইন করতে হয়:
- কপি কনস্ট্রাক্টর
- কপি অ্যাসাইনমেন্ট অপারেটর
- ডিস্ট্রাক্টর
তবে সম্ভবত সব তিনটিই লাগবে। কারণ রিসোর্স ম্যানেজমেন্ট (ডাইনামিক মেমরি) করলে গভীর কপি এবং ক্লিনআপ দুটোই দরকার।
Rule of Five (C++11+)
মুভ সেমানটিক্স আসার পর দুটি নতুন স্পেশাল মেম্বার ফাংশন যোগ হয়েছে:
- মুভ কনস্ট্রাক্টর (
T(T&&)) - মুভ অ্যাসাইনমেন্ট অপারেটর (
T& operator=(T&&))
এখন যদি ক্লাসে যেকোনো একটিই লিখতে হয়, তবে সব পাঁচটি নিয়ে পলিসি নিতে হয়।
তুলনা
| ফিচার | Rule of Three | Rule of Five |
|---|---|---|
| C++ ভার্সন | C++98/03 | C++11+ |
| স্পেশাল মেম্বার | ৩টি | ৫টি |
| মুভ সেমানটিক্স | না | হ্যাঁ |
| পারফরম্যান্স | কপি-ওনلی | মুভ দিয়ে অপ্টিমাইজ |
মডার্ন C++ সেরা অনুশীলন: Rule of Zero - রিসোর্স ম্যানেজমেন্ট unique_ptr, shared_ptr, vector, string ইত্যাদি RAII টাইপের ওপর ছেড়ে দিন। তাহলে কম্পাইলার-জেনারেটেড স্পেশাল মেম্বার ফাংশনগুলো সঠিক কাজ করবে।