Sobes.tech
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()
}

Իմ նախագծերում ես օգտագործել եմ վիրտուալ դեստրուկտորներ՝ հիշողության և ռեսուրսների ճիշտ կառավարում համար՝ դասերի ժառանգականություններում, որպեսզի խուսափեմ արտահոսքերից և անորոշ վարքագծից։