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-ով օբյեկտին նշանավորիչով կանչելով։