এই বিভাগে আমরা আলোচনা করব যেখানে একটি C++ প্রোগ্রাম কম্পাইল করা হলে ভেরিয়েবল এবং অবজেক্ট মেমরিতে সংরক্ষণ করা হয়। আমরা জানি, মেমরির দুটি অংশ আছে যেখানে একটি বস্তু সংরক্ষণ করা যায় -
-
স্ট্যাক − সমস্ত সদস্য যেগুলিকে মেমরির ব্লকের ভিতরে ঘোষণা করা হয়, এটি স্ট্যাক বিভাগের ভিতরে সঞ্চয় করে। প্রধান ফাংশনটিও একটি ফাংশন, তাই এর ভিতরের উপাদানগুলি স্ট্যাকের ভিতরে সংরক্ষণ করা হবে।
-
গাদা − যখন কিছু বস্তুকে গতিশীলভাবে বরাদ্দ করা হয়, তখন সেটি হিপ সেকশনের ভিতরে সংরক্ষণ করা হয়।
একটি ব্লক বা একটি ফাংশনের ভিতরে ঘোষিত বস্তুর সুযোগ যে ব্লকে এটি তৈরি করা হয়েছে তার মধ্যে সীমাবদ্ধ। অবজেক্টটি স্ট্যাকের মধ্যে সংরক্ষণ করা হবে যখন এটি ব্লকের ভিতরে তৈরি হয় এবং যখন নিয়ন্ত্রণটি ব্লক বা ফাংশন থেকে বেরিয়ে যায় তখন বস্তুটি সরানো বা ধ্বংস হয়ে যায়।
গতিশীলভাবে বরাদ্দকৃত বস্তুর ক্ষেত্রে (রানটাইম চলাকালীন) বস্তুটি হিপে সংরক্ষণ করা হবে। এটি নতুন অপারেটরের সাহায্যে করা হয়। সেই বস্তুটিকে ধ্বংস করতে, আমাদের এটিকে স্পষ্টভাবে ধ্বংস করার জন্য del কীওয়ার্ড ব্যবহার করতে হবে।
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
#include <iostream> using namespace std; class Box { int width; int length; public: Box(int length = 0, int width = 0) { this->length = length; this->width = width; } ~Box() { cout << "Box is destroying" << endl; } int get_len() { return length; } int get_width() { return width; } }; int main() { { Box b(2, 3); // b will be stored in the stack cout << "Box dimension is:" << endl; cout << "Length : " << b.get_len() << endl; cout << "Width :" << b.get_width() << endl; } cout << "\tExitting block, destructor" << endl; cout << "\tAutomatically call for the object stored in stack." << endl; Box* box_ptr;{ //Object will be placed in the heap section, and local pointer variable will be stored inside stack Box* box_ptr1 = new Box(5, 6); box_ptr = box_ptr1; cout << "---------------------------------------------------" << endl; cout << "Box 2 dimension is:" << endl; cout << "length : " << box_ptr1->get_len() << endl; cout << "width :" << box_ptr1->get_width() << endl; delete box_ptr1; } cout << "length of box2 : " << box_ptr->get_len() << endl; cout << "width of box2 :" << box_ptr->get_width() << endl; }
আউটপুট
Box dimension is: Length : 2 Width :3 Box is destroying Exitting block, destructor Automatically call for the object stored in stack. --------------------------------------------------- Box 2 dimension is: length : 5 width :6 Box is destroying length of box2 : 0 width of box2 :0