সংকলকটি আপনার পক্ষে যথাসম্ভব কাজ করতে দেওয়ার আমি একটি বড় অনুরাগী। সাধারণ ক্লাস লেখার সময় সংকলক আপনাকে 'ফ্রি' এর জন্য নিম্নলিখিতটি দিতে পারে:
- একটি ডিফল্ট (খালি) নির্মাণকারী
- একটি অনুলিপি নির্মাণকারী
- একজন ধ্বংসকারী
- একটি অ্যাসাইনমেন্ট অপারেটর (
operator=
)
তবে এটি আপনাকে কোনও তুলনামূলক অপারেটর দেওয়ার মতো বলে মনে হচ্ছে না - যেমন operator==
বা operator!=
। উদাহরণ স্বরূপ:
class foo
{
public:
std::string str_;
int n_;
};
foo f1; // Works
foo f2(f1); // Works
foo f3;
f3 = f2; // Works
if (f3 == f2) // Fails
{ }
if (f3 != f2) // Fails
{ }
এর কি কোনও ভাল কারণ আছে? সদস্য দ্বারা সদস্যের তুলনা করা কেন সমস্যা হবে? স্পষ্টতই যদি শ্রেণি মেমরি বরাদ্দ করে তবে আপনি যত্নবান হতে চান, তবে একটি সাধারণ শ্রেণির জন্য অবশ্যই সংকলক আপনার জন্য এটি করতে পারে?
==
মধ্যে একটি ডিফল্ট স্বয়ংক্রিয় অ্যাসাইনমেন্ট ( =
) রয়েছে তেমনিভাবে ডিফল্ট স্বয়ংক্রিয় না হওয়াও ভুল ছিল । (পয়েন্টারগুলি সম্পর্কে যুক্তিটি অসঙ্গত কারণ যুক্তিটি কেবল দ্বিতীয়টির জন্য নয় =
এবং উভয় ক্ষেত্রেই প্রযোজ্য ==
)।