Avatar ·

C++ में वर्चुअल डिस्ट्रक्टर का उपयोग कब करें और यदि उन्हें घोषित न किया जाए तो क्या होगा?

सभी को नमस्कार! मैंने अभी-अभी C++ सीखना शुरू किया है और एक बात समझ नहीं पा रहा हूँ। देखिए: मेरे पास एक बेस class `Base` और एक derived class `Derived` है। `Derived` में मैं heap पर memory allocate करता हूँ। जब मैं बेस class के pointer के माध्यम से object बनाता हूँ और फिर उसे `delete` से हटाता हूँ, तो केवल `Base` का destructor call होता है, `Derived` का नहीं। इससे memory leak होता है, क्योंकि derived class में allocate की गई memory free नहीं होती। मुझे पता है कि बेस class में destructor से पहले `virtual` लगाना चाहिए, तब सब ठीक काम करता है। लेकिन ऐसा क्यों होता है? आखिर मैंने स्पष्ट रूप से कोड लिखा है जो derived class के destructor को call करना चाहिए? या मैं कुछ गलत समझ रहा हूँ? यहाँ मेरा कोड है जो काम नहीं करता (या यूँ कहें काम करता है, लेकिन leak के साथ): ```cpp class Base { public: ~Base() { std::cout << "Base destructor\n"; } }; class Derived : public Base { private: int* data; public: Derived() { data = new int[100]; } ~Derived() { delete[] data; std::cout << "Derived destructor\n"; } }; int main() { Base* ptr = new Derived(); delete ptr; // केवल Base destructor call होता है return 0; } ```