Hoe wordt een object verwijderd via de deleter bij gebruik van unique_ptr?
sobes.tech AI
Antwoord van AI
Bij het gebruik van std::unique_ptr wordt het verwijderen van het beheerde object gedaan via een speciaal object genaamd deleter (verwijderaar). Standaard is dit std::default_delete<T>, dat de delete operator aanroept voor de pointer.
Als je bij het maken van een unique_ptr je eigen deleter meegeeft, wordt deze bij het vernietigen van de unique_ptr aangeroepen. De deleter is een oproepbaar object (een functie, een functioneel object of een lambda) dat een pointer accepteert en verantwoordelijk is voor het correct vrijmaken van de bronnen.
Voorbeeld met een aangepaste deleter:
#include <memory>
#include <iostream>
struct MyDeleter {
void operator()(int* p) const {
std::cout << "Object verwijderen via MyDeleter" << std::endl;
delete p;
}
};
int main() {
std::unique_ptr<int, MyDeleter> ptr(new int(42));
// Bij het verlaten van main wordt MyDeleter::operator()(ptr.get()) aangeroepen
}
Op deze manier gebeurt het verwijderen van het object automatisch bij het vernietigen van de unique_ptr, waarbij de deleter wordt aangeroepen met de pointer naar het object.