আমি দু'জনের মধ্যে কিছুটা আরও ভাল পার্থক্য করার জন্য জিনিসগুলিকে আলাদাভাবে বাক্য বানানোর চেষ্টা করি তবে এটি কোনও ক্ষেত্রেই ভাল প্রশ্ন।
অপারেটর নতুন হ'ল একটি ফাংশন যা কাঁচা মেমরি বরাদ্দ করে - কমপক্ষে ধারণাগতভাবে, এটি এর চেয়ে আলাদা নয় malloc()। যদিও আপনি নিজের কন্টেনারের মতো কিছু না লিখে এটি মোটামুটি অস্বাভাবিক, তবুও আপনি সরাসরি অপারেটরকে নতুন কল করতে পারেন:
char *x = static_cast<char *>(operator new(100));
বিশ্বব্যাপী, বা একটি নির্দিষ্ট শ্রেণীর জন্য নতুন ওভারলোড অপারেটরটিও সম্ভব। আইআইআরসি, স্বাক্ষরটি হ'ল:
void *operator new(size_t);
অবশ্যই, আপনি যদি কোনও অপারেটর নতুন (কোনও গ্লোবাল বা কোনও শ্রেণীর জন্য) ওভারলোড করেন তবে আপনিও চাইবেন / ম্যাচিং অপারেটরটিও মুছে ফেলুন over এটির মূল্যের জন্য, অ্যারেগুলির জন্য মেমরি বরাদ্দ করতে ব্যবহৃত একটি পৃথক অপারেটরও নতুন [] রয়েছে - তবে আপনি পুরো গণ্ডগোলটিকে পুরোপুরি উপেক্ষা করার চেয়ে আরও ভাল।
নতুন অপারেটরটি হ'ল আপনি সাধারণভাবে ফ্রি স্টোর থেকে কোনও অবজেক্ট তৈরি করতে ব্যবহার করেন:
my_class *x = new my_class(0);
উভয়ের মধ্যে পার্থক্য হ'ল অপারেটর নতুন কেবল কাঁচা মেমরি বরাদ্দ করে, অন্য কিছুই। নতুন অপারেটর মেমরি বরাদ্দ করতে অপারেটরটি নতুন ব্যবহার করে শুরু করে, তবে তারপরে এটি সঠিক ধরণের অবজেক্টের জন্য কনস্ট্রাক্টরকে অনুরোধ করে, ফলস্বরূপ ফলাফলটি সেই মেমরিতে তৈরি একটি বাস্তব লাইভ অবজেক্ট। যদি সেই অবজেক্টটিতে অন্য কোনও অবজেক্ট থাকে (হয় এম্বেড করা বা বেস ক্লাস হিসাবে) সেই কনস্ট্রাক্টররাও অনুরোধ করা হয়েছে।