Je veux créer une fonction pour la création et l'initialisation d'un type commandé (un peu comme une usine) de la manière suivante:Création de type commandé appellera finaliser le retour
function Create return Controlled_Type
is
Foo : Controlled_Type;
begin
Put_Line ("Check 1")
return Foo;
end Create;
procedure Main
is
Bar : Controlled_Type := Create;
begin
Put_Line ("Check 2")
end Main;
output:
Initialize
Check 1
Adjust
Finalize
Comme le Finaliser disposera de certains objets pointés dans le type contrôlé I se retrouvent avec des pointeurs qui pendent dans Bar, et d'une manière ou d'une autre cela bloque immédiatement le programme, donc je ne vois jamais "Check 2".
Ceci peut être facilement résolu en utilisant un nouveau Controlled_Type et en renvoyant un pointeur dans la fonction Create. Cependant, j'aime l'idée d'avoir le type contrôlé et non pas un pointeur car la finalisation sera automatiquement appelée quand Bar sortira de sa portée. Si Bar était un pointeur, je devrais m'en débarrasser manuellement.
Y at-il un moyen de le faire correctement sans se retrouver avec des pointeurs pendants? Devrais-je faire un peu de magie dans la procédure Ajuster?
Merci beaucoup pour la réponse étendue, il m'a vraiment aidé à comprendre comment mettre en œuvre la Ajuster la procédure. Dans mon cas particulier, j'ai une structure de données arborescente sous le type principal contrôlé qui nécessitait une procédure récursive de réglage, mais à la fin cela a fonctionné comme un charme. – FinalArt2005