delete()
delete অপারেটর ব্যবহার করা হয় মেমরি ডি-অলোকেট করতে। ইউজার এই delete অপারেটর দিয়ে তৈরি করা পয়েন্টার ভেরিয়েবল ডি-অলোকেট করতে পারেন।
C++-এ delete অপারেটরের সিনট্যাক্স নিচে দেওয়া হল,
delete pointer_variable;
আলোকেট করা মেমরি ব্লক ডিলিট করার সিনট্যাক্স নিচে দেওয়া হল,
delete[] pointer_variable;
C++-এ delete অপারেটরের একটি উদাহরণ নিচে দেওয়া হল,
উদাহরণ
#include <iostream>
using namespace std;
int main() {
int *ptr1 = NULL;
ptr1 = new int;
float *ptr2 = new float(299.121);
int *ptr3 = new int[28];
*ptr1 = 28;
cout << "Value of pointer variable 1 : " << *ptr1 << endl;
cout << "Value of pointer variable 2 : " << *ptr2 << endl;
if (!ptr3)
cout << "Allocation of memory failed\n";
else {
for (int i = 10; i < 15; i++)
ptr3[i] = i + 1;
cout << "Value of store in block of memory: ";
for (int i = 10; i < 15; i++)
cout << ptr3[i] << " ";
}
delete ptr1;
delete ptr2;
delete[] ptr3;
return 0;
}
আউটপুট
Value of pointer variable 1 : 28 Value of pointer variable 2 : 299.121 Value of store in block of memory: 11 12 13 14 15
উপরের প্রোগ্রামে, তিনটি পয়েন্টার ভেরিয়েবল ptr1, ptr2 এবং ptr3 ডিক্লেয়ার করা হয়েছে। পয়েন্টার ভেরিয়েবল ptr1 এবং ptr2 new() দিয়ে মান দিয়ে ইনিশিয়ালাইজ করা হয়েছে এবং ptr3 new() ফাংশন দিয়ে aloket করা মেমরি ব্লক সংরক্ষণ করছে।
int *ptr1 = NULL; ptr1 = new int; float *ptr2 = new float(299.121); int *ptr3 = new int[28]; *ptr1 = 28;
ইউজার দ্বারা অ্যারে এলিমেন্টগুলো প্রিন্ট করা হয়েছে এবং এলিমেন্টগুলোর যোগফল প্রিন্ট করা হয়েছে। aloket করা মেমরি ডিলিট করতে delete ptr1, delete ptr2 এবং delete[] ptr3 ব্যবহার করা হয়েছে।
delete ptr1; delete ptr2; delete[] ptr3;
free()
free() ফাংশন malloc() দিয়ে aloket করা মেমরি ডি-অলোকেট করতে ব্যবহৃত হয়। এটি পয়েন্টারটির মান পরিবর্তন করে না অর্থাৎ এটি এখনও সেই মেমরি লোকেশন পয়েন্ট করে।
C ভাষায় free() এর সিনট্যাক্স নিচে দেওয়া হল,
void free(void *pointer_name);
এখানে,
pointer_name − পয়েন্টারকে দেওয়া যেকোনো নাম।
C ভাষায় free() এর একটি উদাহরণ নিচে দেওয়া হল,
উদাহরণ
#include <stdio.h>
#include <stdlib.h>
int main() {
int n = 4, i, *p, s = 0;
p = (int*) malloc(n * sizeof(int));
if (p == NULL) {
printf("\nError! memory not allocated.");
exit(0);
}
printf("\nEnter elements of array : ");
for (i = 0; i < n; ++i) {
scanf("%d", p + i);
s += *(p + i);
}
printf("\nSum : %d", s);
free(p);
return 0;
}
আউটপুট
Enter elements of array : 32 23 21 28 Sum : 104
উপরের প্রোগ্রামে, চারটি ভেরিয়েবল ডিক্লেয়ার করা হয়েছে এবং 그중 একটি পয়েন্টার ভেরিয়েবল *p যা aloket করা মেমরি সংরক্ষণ করছে।
int n = 4, i, *p, s = 0; p = (int*) malloc(n * sizeof(int));
ইউজার দ্বারা অ্যারে এলিমেন্টগুলো দেওয়া হয়েছে এবং তাদের মানগুলোর যোগফল প্রিন্ট করা হয়েছে। পয়েন্টার ফ্রি করার কোড নিচে দেওয়া হল -
free(p);