Constructors aur RAII
Ek destructor, jo class ke naam ke aage ~ laga kar likha jaata hai, jab ek object scope se bahar jaata hai to automatically chalta hai — deterministically, kisi unpredictable baad ke point par nahi, jaise ek garbage collector ka finalizer ho sakta hai. Ek constructor jo resource acquire karta hai, uska ek destructor ke sath pairing jo use release karta hai, yahi RAII hai: Resource Acquisition Is Initialization.
#include <iostream>
using namespace std;
class Logger {
public:
Logger() {
cout << "Logger created" << endl;
}
~Logger() {
cout << "Logger destroyed" << endl;
}
};
int main() {
cout << "Before scope" << endl;
{
Logger log;
cout << "Inside scope" << endl;
}
cout << "After scope" << endl;
return 0;
}Before scope Logger created Inside scope Logger destroyed After scope
Exact order dhyan rahe: destructor foran chalta hai jaise hi log apne enclosing block se bahar jaata hai, 'After scope' print hone se bhi pehle. Yahi core idea hai C++ ke har resource-managing type ke peeche — file handles, locks, aur is course mein baad mein cover hone wale smart pointers, sab isi mechanism par inhisar karte hain, na ke garbage collector ki indeterminate timing par.
Aage: encapsulation — access control, aur jab ek class ke paas protect karne ke liye invariants hon to fields ko private banana kyun matter karta hai.
Practice exercise
Ek class Counter define karein jiska constructor "Counter started" print kare aur jiska destructor "Counter finished" print kare. main mein ek Counter banayein, use banane ke baad "Running" print karein, phir use scope se bahar jaane dein.