Rule of Five হলো C++11-এ রিসোর্স ম্যানেজমেন্টের জন্য গাইডলাইন। যদি ক্লাসটি রিসোর্স ম্যানেজ করে (মেমরি, ফাইল হ্যান্ডল, সকেট ইত্যাদি), তবে নিচের পাঁচটি ফাংশন সবই ডিফাইন/ডিলিট/ডিফল্ট করতে হয়:
- ডিস্ট্রাক্টর (Destructor): রিসোর্স মুক্ত করা।
- কপি কনস্ট্রাক্টর (Copy Constructor): গভীর কপি (deep copy) নিশ্চিত করা।
- কপি অ্যাসাইনমেন্ট অপারেটর (Copy Assignment): গভীর কপি, সেলফ-অ্যাসাইনমেন্ট হ্যান্ডলিং।
- মুভ কনস্ট্রাক্টর (Move Constructor): রিসোর্স অনারশিপ ট্রান্সফার (C++11 নতুন)।
- মুভ অ্যাসাইনমেন্ট অপারেটর (Move Assignment): রিসোর্স অনারশিপ ট্রান্সফার (C++11 নতুন)।
কেন Rule of Three (৩) থেকে Five (৫) হলো?
C++98/03-এ শুধু ৩টি ছিল (কপি কনস্ট্রাক্টর, কপি অ্যাসাইনমেন্ট, ডিস্ট্রাক্টর)। C++11-এ মুভ সেমানটিক্স (rvalue reference, &&) আসার পর মুভ কনস্ট্রাক্টর এবং মুভ অ্যাসাইনমেন্ট যোগ হয়েছে।
নियम: যদি আপনাকে উপরের যেকোনো একটিই লিখতে হয়, তবে সাবধানে সব পাঁচটি নিয়ে ডিজাইন করতে হবে। ডিফল্ট বিল্ড-ইন মান (= default) বা ডিলিট (= delete) করতে পারেন।
রিসোর্স: Rule of the Big Five PDF