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 run hota 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 saath 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 do: destructor turant run hota 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 depend karte hain, na ki 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 karo jiska constructor "Counter started" print kare aur jiska destructor "Counter finished" print kare. main mein ek Counter banao, use banane ke baad "Running" print karo, phir use scope se bahar jaane do.