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-ის გამოძახებით ობიექტზე მითითებულ პინტერზე.