কম্পিউটার টিউটোরিয়াল

C++-এ Rule of Three vs Rule of Five পার্থক্য

Rule of Three (C++98/03)

যদি ক্লাসে যেকোনো একটিই এক্সপ্লিসিটলি ডিফাইন করতে হয়:

  • কপি কনস্ট্রাক্টর
  • কপি অ্যাসাইনমেন্ট অপারেটর
  • ডিস্ট্রাক্টর

তবে সম্ভবত সব তিনটিই লাগবে। কারণ রিসোর্স ম্যানেজমেন্ট (ডাইনামিক মেমরি) করলে গভীর কপি এবং ক্লিনআপ দুটোই দরকার।

Rule of Five (C++11+)

মুভ সেমানটিক্স আসার পর দুটি নতুন স্পেশাল মেম্বার ফাংশন যোগ হয়েছে:

  • মুভ কনস্ট্রাক্টর (T(T&&))
  • মুভ অ্যাসাইনমেন্ট অপারেটর (T& operator=(T&&))

এখন যদি ক্লাসে যেকোনো একটিই লিখতে হয়, তবে সব পাঁচটি নিয়ে পলিসি নিতে হয়।

তুলনা

ফিচারRule of ThreeRule of Five
C++ ভার্সনC++98/03C++11+
স্পেশাল মেম্বার৩টি৫টি
মুভ সেমানটিক্সনাহ্যাঁ
পারফরম্যান্সকপি-ওনلیমুভ দিয়ে অপ্টিমাইজ

মডার্ন C++ সেরা অনুশীলন: Rule of Zero - রিসোর্স ম্যানেজমেন্ট unique_ptr, shared_ptr, vector, string ইত্যাদি RAII টাইপের ওপর ছেড়ে দিন। তাহলে কম্পাইলার-জেনারেটেড স্পেশাল মেম্বার ফাংশনগুলো সঠিক কাজ করবে।

  1. সি++-এ তিনটি বিন্দু সমরৈখিক (collinear) কিনা তা যাচাই করার প্রোগ্রাম

  2. C++-এ কমপ্যারিজন কম করে তিন সংখ্যার মাঝখানের মান বের করা

  3. C++11-এ Rule of Five (পাঁচটি নিয়ম) কী?

  4. C++-এ রুল অফ থ্রি (Rule of Three) কী?