


Inzicht in vastgehouden geheugen in functies
In de context van een functie verwijst 'retains' naar het feit dat de functie het gebruikte geheugen niet vrijgeeft of vrijmaakt. In plaats daarvan houdt het het geheugen vast en is het verantwoordelijk voor het ongedaan maken van de toewijzing ervan wanneer het niet langer nodig is. Met andere woorden: een functie die het geheugen vasthoudt, stuurt het geheugen niet terug naar de heap of de stapel nadat het het gebruik ervan heeft beëindigd. Dit betekent dat de functie verantwoordelijk is voor het beheer van de levensduur van het geheugen, wat in bepaalde situaties nuttig kan zijn, maar ook zorgvuldig beheer vereist om geheugenlekken te voorkomen. Beschouw bijvoorbeeld een functie die geheugen toewijst aan een grote gegevensstructuur en vervolgens een verwijzing naar die datastructuur naar de beller. Als de functie het geheugen niet vrijgeeft wanneer het niet langer nodig is, blijft het geheugen behouden door de functie en is de aanroeper verantwoordelijk voor het later ongedaan maken van de toewijzing ervan. Dit kan leiden tot geheugenlekken als de beller vergeet de toewijzing van het geheugen ongedaan te maken. Een functie daarentegen die een pointer retourneert naar geheugen dat is toegewezen aan de stapel of de heap en vervolgens het geheugen vrijgeeft wanneer het niet langer nodig is (dat wil zeggen: malloc` en `free`) behoudt het geheugen niet. Het geheugen wordt weer vrijgegeven aan de heap of de stapel zodra de functie het niet meer gebruikt, zodat de beller zich geen zorgen hoeft te maken over het beheren van de levensduur van het geheugen.



