C++-এ ডেস্ট্রাক্টর এবং C-র free() (বা C++-র delete) ভিন্ন কনসেপ্ট।
ডেস্ট্রাক্টর (Destructor)
- অবজেক্ট ডিস্ট্রয় হওয়ার পূর্বে আটোমেটিক্যালি কল হয়।
- ক্লিন-আপ কোড (রিসোর্স রিলিজ, লগিং ইত্যাদি) লিখতে ব্যবহৃত হয়।
- আর্গুমেন্ট নেয় না, রিটার্ন টাইপ নেই।
- স্ট্যাক অবজেক্টের জন্য স্কোপ শেষে, হিপ অবজেক্টের জন্য
deleteকললে রান হয়।
free() / delete
- মেমরি ডি-অ্যালোকেট করে (রিলিজ করে)।
deleteডেস্ট্রাক্টর কল করে,free()করে না (C-স্টাইল)।- C++-এ
newদিয়ে আলোকেট করা মেমরিdeleteদিয়ে,mallocদিয়ে আলোকেট করাfreeদিয়ে ফ্রি করতে হয়।
উদাহরণ
#include <iostream>
using namespace std;
class MyClass {
public:
~MyClass() { cout << "Destructor called" << endl; }
};
int main() {
MyClass* obj = new MyClass();
delete obj; // মেমরি ফ্রি + ডেস্ট্রাক্টর কল
return 0;
}
আউটপুট
Destructor called
গুরুত্বপূর্ণ: free() ব্যবহার করে C++ অবজেক্ট ডিলিট করলে ডেস্ট্রাক্টর কল হয় না → রিসোর্স লিক। সবসময় new/delete জোড়া ব্যবহার করুন। স্মার্ট পয়েন্টার (unique_ptr, shared_ptr) ব্যবহার করলে ম্যানুয়াল delete প্রয়োজন নেই।