C++-এ যখন আমরা একটি নতুন অবজেক্ট তৈরি করতে চাই, তখন মেমরিতে একটি মেমরি ব্লক তৈরি করতে হয়, তারপর কনস্ট্রাক্টর কল করে সেই মেমরি ব্লক ইনিশিয়ালাইজ করতে হয়। আমরা new কিওয়ার্ড ব্যবহার করে মেমরি এলিমেন্ট তৈরি করতে পারি। এই new অপারেটর দুটি ক্রমাগত কাজ করে। কিন্তু operator new শুধু মেমরি স্পেস তৈরি করে।
New কিওয়ার্ড (New Keyword)
new অপারেটর একটি বিশেষ ধরনের অপারেটর, যা হিপ (heap) সেকশনে মেমরি এলোকেশন রিকোয়েস্ট নির্দেশ করে।যদি পর্যাপ্ত মেমরি উপলব্ধ থাকে, তখন new অপারেটর মেমরিটি পয়েন্টার ভেরিয়েবলে ইনিশিয়ালাইজ করে। সাধারণ new কিওয়ার্ড ব্যবহার করে অবজেক্ট তৈরি করলে এটি দুটি ক্রমাগত কাজ করে:
- ? অবজেক্টের জন্য হিপ সেকশনে মেমরি ব্লক এলোকেট করে
- ? কনস্ট্রাক্টর কল করে মেমরি ব্লক ইনিশিয়ালাইজ করে
উদাহরণ কোড
#include <iostream>
using namespace std;
class Box {
public:
Box() {
cout << "Constructor called!" << endl;
}
};
int main() {
Box* myBox = new Box;
}
আউটপুট
Constructor called!
Operator New
operator new একটি ফাংশন। এই ফাংশনটি new অপারেটর ওভারলোড করতে ব্যবহৃত হয়। এর ব্যবহার করে র (raw) মেমরি ব্লক এলোকেট করা যায়। এটি কনসেপচুয়ালি 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!