Junior — Middle
Hogyan történik egy objektum törlése a deleter segítségével a unique_ptr használatakor?
sobes.tech MI
Válasz az MI-től
A std::unique_ptr használatakor a kezelt objektum törlése egy speciális objektum, úgynevezett deleter (törlő) segítségével történik. Alapértelmezés szerint ez a std::default_delete<T>, amely a delete operátort hívja meg a mutatón.
Ha a unique_ptr létrehozásakor saját deletert ad meg, akkor az lesz az, aki a unique_ptr megsemmisítésekor meghívásra kerül. A deleter egy hívható objektum (egy függvény, egy funkcióobjektum vagy egy lambda), amely elfogad egy mutatót, és felelős a források helyes felszabadításáért.
Példa egy egyedi deleterrel:
#include <memory>
#include <iostream>
struct MyDeleter {
void operator()(int* p) const {
std::cout << "Objektum törlése a MyDeleter segítségével" << std::endl;
delete p;
}
};
int main() {
std::unique_ptr<int, MyDeleter> ptr(new int(42));
// A main végén meghívásra kerül a MyDeleter::operator()(ptr.get())
}
Így az objektum törlése automatikusan történik a unique_ptr megsemmisítésekor, a deleter meghívásával a mutatóval az objektumra.