En supposant que vous voulez dire C++/CLI (pas l'ancien Managed C++), les éléments suivants sont vos options:
(1) Mimic un utilisant-bloc avec l'aide d'objets automatique/stackbased:
{
SqlConnection conn(connectionString);
}
Cela appellera le Destructeur de l'objet "conn" lorsque le bloc suivant sera terminé. Qu'il s'agisse de la fonction englobante ou d'un bloc que vous ajoutez manuellement pour limiter la portée, cela n'a pas d'importance.
(2) appeler Explicitement "disposer", à savoir détruire l'objet:
SqlConnection^ conn = nullptr;
try
{
conn = gcnew SqlConnection(conntectionString);
}
finally
{
if (conn != nullptr)
delete conn;
}
Le premier serait le remplacement direct "à l'aide". Le second est une option, généralement vous n'aurez pas besoin de le faire à moins que vous ne passiez la référence à un autre endroit.
La première syntaxe (en utilisant des accolades nues pour limiter la portée) garantit-elle d'appeler Dispose même si vous quittez la portée en lançant une exception? Je ne pensais pas que c'était le cas, mais bien sûr je peux me tromper. – Coderer
Oui c'est garanti. En effet, c'est l'idée ici. Les destructeurs d'objets alloués à la pile sont appelés lorsque la portée englobante se termine (soit régulièrement, soit prématurément par une exception) - en fait cela n'a rien à voir avec la gestion ou pas. C'est aussi de cette façon en code natif. –
@ Christian.K, êtes-vous sûr de "à moins que vous ne passiez la référence ailleurs"? Je pense que cet exemple (1) serait bien même dans ce cas. – JoelFan