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