Junior — Middle
Ako sa vykonáva odstránenie objektu cez deleter pri použití unique_ptr?
sobes.tech AI
Odpoveď od AI
Pri použití std::unique_ptr sa odstránenie spravovaného objektu vykonáva prostredníctvom špeciálneho objektu nazývaného deleter (vymazávač). Predvolený je std::default_delete<T>, ktorý volá operátor delete na ukazovateli.
Ak pri vytváraní unique_ptr zadáte vlastný deleter, bude práve ten volaný pri zániku unique_ptr. Deleter je volateľný objekt (funkcia, funkčný objekt alebo lambda), ktorý prijíma ukazovateľ a je zodpovedný za správne uvoľnenie zdrojov.
Príklad s vlastným deleterom:
#include <memory>
#include <iostream>
struct MyDeleter {
void operator()(int* p) const {
std::cout << "Odstraňovanie objektu cez MyDeleter" << std::endl;
delete p;
}
};
int main() {
std::unique_ptr<int, MyDeleter> ptr(new int(42));
// Pri ukončení main sa zavolá MyDeleter::operator()(ptr.get())
}
Týmto spôsobom sa odstránenie objektu vykonáva automaticky pri zániku unique_ptr, volaním deleteru s ukazovateľom na objekt.