কম্পিউটার

C++-এ তিনের নিয়ম বনাম পাঁচের নিয়ম?


C++ ব্যবহার করার সময় তিনটির নিয়ম হল একটি অঙ্গুষ্ঠের নিয়ম। এটি একটি ভাল অনুশীলনের নিয়ম যা বলে যে যদি আপনার ক্লাসের যে কোনোটির প্রয়োজন হয়

  • একটি কপি কনস্ট্রাক্টর,
  • একজন অ্যাসাইনমেন্ট অপারেটর,
  • বা একটি ধ্বংসকারী,

স্পষ্টভাবে সংজ্ঞায়িত করা হয়, তাহলে তাদের তিনটিরই প্রয়োজন হতে পারে।

কেন? এর কারণ, যদি আপনার ক্লাসের উপরোক্ত যেকোনোটির প্রয়োজন হয়, তবে এটি গতিশীলভাবে বরাদ্দকৃত সংস্থানগুলি পরিচালনা করছে এবং সম্ভবত এটি সফলভাবে অর্জন করতে অন্যটির প্রয়োজন হবে। উদাহরণস্বরূপ, যদি আপনার একটি অ্যাসাইনমেন্ট অপারেটরের প্রয়োজন হয়, আপনি বর্তমানে রেফারেন্স দ্বারা অনুলিপি করা বস্তুর অনুলিপি তৈরি করবেন, তাই সম্পদ বরাদ্দ করা হচ্ছে। কপি করার জন্য আপনার কপি কনস্ট্রাক্টর এবং এই রিসোর্সগুলোকে মুক্ত করার জন্য ডেস্ট্রক্টরের প্রয়োজন হবে।

C++11-এ মুভ শব্দার্থবিদ্যার প্রবর্তনের কারণে রুল অফ ফাইভ হল তিনের নিয়মের একটি এক্সটেনশন। রিসোর্স ম্যানেজমেন্টের জন্য C++-এও পাঁচের নিয়ম প্রয়োগ করা হয়। এই নিয়মটি সম্ভাব্যভাবে মেমরি ফাঁস এবং C++ কোডের অন্যান্য সমস্যা দূর করে। দ্য বিগ ফাইভের নিয়ম বলে যে আপনাকে যদি নিম্নলিখিত ফাংশনগুলির মধ্যে একটি লিখতে হয় তবে সেগুলির জন্য আপনার একটি নীতি থাকতে হবে। যদি আমাদের একটি অবজেক্ট Foo থাকে তাহলে আমাদের একটি FooManager থাকতে পারে যেটি Foo রিসোর্স পরিচালনা করে। FooManager প্রয়োগ করার সময়, আপনি সম্ভবত নিম্নলিখিত ফাংশনগুলি প্রয়োগ করতে হবে -

  • ধ্বংসকারী − যখন এই ম্যানেজার সুযোগের বাইরে চলে যায় তখন এটির পরিচালনা করা সমস্ত সংস্থান মুক্ত করা উচিত।

  • অ্যাসাইনমেন্ট অপারেটর - যদি আপনি একটি প্রদান না করেন তবে কম্পাইলার একটি ডিফল্ট অ্যাসাইনমেন্ট অপারেটর তৈরি করে। ডিফল্ট অ্যাসাইনমেন্ট অপারেশন হল সদস্য-ভিত্তিক কপি ফাংশন এবং এটি একটি অগভীর অনুলিপি করে এবং একটি গভীর অনুলিপি নয়। এর ফলে মেমরি লিক, ভুল অ্যাসাইনমেন্টের মতো সমস্যা হতে পারে।

  • কপি কনস্ট্রাক্টর - কম্পাইলার সরবরাহ করা কপি কনস্ট্রাক্টর সমস্ত FooManagers অ্যাট্রিবিউটের সদস্য-ভিত্তিক অনুলিপি করে। এটি অ্যাসাইনমেন্ট অপারেটরের মতো একই সমস্যা তৈরি করে।

  • মুভ কনস্ট্রাক্টর - বস্তুর অনুলিপি করা ব্যয়বহুল হতে পারে কারণ এতে অস্থায়ী বস্তু তৈরি করা, অনুলিপি করা এবং তারপর ধ্বংস করা জড়িত। C++11 r-value রেফারেন্সের ধারণাটি চালু করেছে। একটি r-মান রেফারেন্স স্পষ্টভাবে একটি r-মানের সাথে আবদ্ধ হতে পারে। একটি r-মান একটি নামহীন বস্তু। অন্য কথায়, একটি অস্থায়ী বস্তু। এই r-মান রেফারেন্সটি একটি কনস্ট্রাক্টরে ব্যবহার করা যেতে পারে যাতে এটিতে পাস করা r-মানের একটি রেফারেন্স তৈরি করা যায়

  • মুভ কনস্ট্রাক্টর - বস্তুর অনুলিপি করা ব্যয়বহুল হতে পারে কারণ এতে অস্থায়ী বস্তু তৈরি করা, অনুলিপি করা এবং তারপর ধ্বংস করা জড়িত। C++11 r-value রেফারেন্সের ধারণাটি চালু করেছে। একটি r-মান রেফারেন্স স্পষ্টভাবে একটি r-মানের সাথে আবদ্ধ হতে পারে। একটি r-মান একটি নামহীন বস্তু। অন্য কথায়, একটি অস্থায়ী বস্তু। এই r-মান রেফারেন্সটি একটি কনস্ট্রাক্টরে ব্যবহার করা যেতে পারে যাতে এটিতে পাস করা r-মানের একটি রেফারেন্স তৈরি করা যায়।

  • অ্যাসাইনমেন্ট অপারেটর সরান - এটি একটি সময়ে শুধুমাত্র একটি সম্পদ থাকা দরকারী। এই সম্পদের মালিকানা এক পরিচালক থেকে অন্য পরিচালকের কাছে স্থানান্তর করা যেতে পারে। এই ধরনের ক্ষেত্রে, আপনি একটি মুভ অ্যাসাইনমেন্ট অপারেটর প্রদান করতে পারেন।

পাঁচটির নিয়ম সম্পর্কে জানার জন্য এটি একটি দুর্দান্ত সম্পদ - https://www.feabhas.com/sites/default/files/2016-06/Rule%20of%20the%20Big%20Five.pdf।


  1. C++ এ তিনটি বিন্দু সমরেখার কিনা তা পরীক্ষা করার জন্য প্রোগ্রাম

  2. C++ এ ন্যূনতম তুলনা ব্যবহার করে তিনটির মাঝামাঝি

  3. C++11-এ পাঁচের নিয়ম কী?

  4. C++ এর রেফারেন্স সহ তিনের নিয়ম কি?