Sobes.tech
Junior — Middle

Ինչպե՞ս է կատարվում օբյեկտի հեռացումը deleter-ի միջոցով, երբ օգտագործվում է unique_ptr:

sobes.tech AI

Պատասխան AI-ից

Երբ օգտագործվում է std::unique_ptr, կառավարվող օբյեկտի ջնջումը կատարվում է հատուկ օբյեկտի՝ deleter (ջնջող) միջոցով։ Դրա նախնական տարբերակը std::default_delete<T>, որը կանչում է delete օպերատորը նշանավորիչի համար։

Եթե unique_ptr ստեղծելիս փոխանցեք ձեր սեփական deleter-ը, ապա հենց դա կկոչվի unique_ptr-ի ոչնչացման ժամանակ։ Deleter-ը մի callable օբյեկտ է (ֆունկցիա, ֆունկցիոնալ օբյեկտ կամ lambda), որը ընդունում է նշանավորիչ և պատասխանատու է ռեսուրսների ճիշտ ազատման համար։

Օրինակ՝ անձնական deleter-ով՝

#include <memory>
#include <iostream>

struct MyDeleter {
    void operator()(int* p) const {
        std::cout << "Объектը ջնջվում է MyDeleter-ով" << std::endl;
        delete p;
    }
};

int main() {
    std::unique_ptr<int, MyDeleter> ptr(new int(42));
    // main-ից դուրս գալու ժամանակ, MyDeleter::operator()(ptr.get()) կկոչվի
}

Այս կերպ, օբյեկտի ջնջումը ավտոմատ կերպով կատարվում է unique_ptr-ի ոչնչացման ժամանակ՝ deleter-ով օբյեկտին նշանավորիչով կանչելով։