Junior — Middle
Դուք ունե՞ք փորձ ձեր նախագծերում վիրտուալ ոչնչացնողների օգտագործման վերաբերյալ։
sobes.tech AI
Պատասխան AI-ից
C++-ում վիրտուալ դեստրուկտորները օգտագործվում են ռեսուրսների ճիշտ ազատման համար՝ երբ օբյեկտները ջնջվում են բազային դասի ցուցակով։ Եթե դասում կա վիրտուալ ֆունկցիաներ և ենթադրվում է ժառանգություն, դեստրուկտորը պետք է լինի վիրտուալ, որպեսզի delete-ով բազային ցուցակով կանչելիս, կանչվի ժառանգական դասի դեստրուկտորը։
Օրինակ՝
class Base {
public:
virtual ~Base() { std::cout << "Բազային դեստրուկտոր" << std::endl; }
};
class Derived : public Base {
public:
~Derived() override { std::cout << "Ժառանգական դեստրուկտոր" << std::endl; }
};
int main() {
Base* obj = new Derived();
delete obj; // կկանչվի Derived::~Derived() և հետո Base::~Base()
}
Իմ նախագծերում ես օգտագործել եմ վիրտուալ դեստրուկտորներ՝ հիշողության և ռեսուրսների ճիշտ կառավարում համար՝ դասերի ժառանգականություններում, որպեսզի խուսափեմ արտահոսքերից և անորոշ վարքագծից։