কম্পিউটার

C++ এ নতুন অপারেটর এবং নতুন অপারেটরের মধ্যে পার্থক্য?


C++ এ যখন আমরা একটি নতুন অবজেক্ট তৈরি করতে চাই, আমাদের মেমরিতে একটি মেমরি ব্লক তৈরি করতে হবে, তারপর মেমরি ব্লক শুরু করতে কনস্ট্রাক্টরকে কল করতে হবে। আমরা নতুন কীওয়ার্ড ব্যবহার করে মেমরি উপাদান তৈরি করতে পারি। নতুন এই অপারেটরটি পরপর দুটি কাজ করছে। কিন্তু নতুন অপারেটর শুধুমাত্র মেমরি স্পেস তৈরি করে।

নতুন কীওয়ার্ড

নতুন অপারেটর হল একটি বিশেষ ধরনের অপারেটর, যা হিপ বিভাগে মেমরি বরাদ্দকরণের জন্য একটি অনুরোধ নির্দেশ করে। যখন পর্যাপ্ত মেমরি পাওয়া যায়, তখন শুধুমাত্র নতুন অপারেটররা পয়েন্টার ভেরিয়েবলে মেমরি চালু করে। যখন আমরা একটি সাধারণ নতুন কীওয়ার্ড ব্যবহার করে একটি বস্তু তৈরি করি তখন এটি পরপর দুটি কাজ করে

  • ? বস্তুটির জন্য হিপ বিভাগে মেমরি ব্লক বরাদ্দ করুন
  • ? মেমরি ব্লক শুরু করতে কনস্ট্রাক্টরকে কল করুন।

উদাহরণ কোড

#include <iostream>
using namespace std;
class Box {
   public:
   Box() {
      cout << "Constructor called!" <<endl;
   }
};
int main() {
   Box* myBox = new Box;
}

আউটপুট

Constructor called!

অপারেটর নতুন

অপারেটর নতুন একটি ফাংশন. এই ফাংশনটি নতুন অপারেটরকে ওভারলোড করতে ব্যবহৃত হয়। এটি ব্যবহার করে আমরা কাঁচা মেমরি ব্লক বরাদ্দ করতে পারি। এটি ধারণাগতভাবে malloc() বা calloc() ফাংশনের অনুরূপ। এই ফাংশনটি কনস্ট্রাক্টরকে কল করে না তাই মেমরি আরম্ভ করা হয় না। তবে এই ওভারলোডেড পদ্ধতি থেকে পয়েন্টার ফেরত দেওয়ার পরে, কম্পাইলার তার পরে কনস্ট্রাক্টরকে কল করে।

উদাহরণ কোড

#include <iostream>
#include <cstdlib>
using namespace std;
class Box {
   public:
   Box() {
      cout << "Constructor called!" <<endl;
   }
   void *operator new(size_t size) {
      cout << "Call Operator New"<<endl;
      void *p = malloc(size);
      return p;
   }
};
int main() {
   Box* myBox = new Box;
}

আউটপুট

Call Operator New
Constructor called!

  1. C++ এ নতুন এবং ডিলিট অপারেটর

  2. C++ এ রিলেশনাল অপারেটর(==) এবং std::string::compare() এর মধ্যে পার্থক্য

  3. C++ এ ডট (.) অপারেটর এবং -> এর মধ্যে পার্থক্য কী?

  4. মধ্যে পার্থক্য!==এবং ==! পিএইচপি-তে অপারেটর