Suponiendo que quiere decir C++/CLI (no el viejo C++ administrado), las siguientes son las opciones:
(1) Mimic un uso-bloque con el uso de objetos automáticos/stackbased:
{
SqlConnection conn(connectionString);
}
Esto llamará al Destructor del Objeto "conn" cuando el siguiente bloque envolvente finalice. No importa si esta es la función adjunta o si se agrega manualmente un bloque para limitar el alcance.
(2) Explícitamente llamar "eliminar", es decir, destrucción del objeto:
SqlConnection^ conn = nullptr;
try
{
conn = gcnew SqlConnection(conntectionString);
}
finally
{
if (conn != nullptr)
delete conn;
}
El primero sería el reemplazo directo para el "uso". El segundo es una opción, por lo general no tendrá que hacerlo a menos que, opcionalmente, pase la referencia a otro lugar.
¿La primera sintaxis (utilizando llaves desnudas para limitar el alcance) garantiza llamar a Dispose aunque abandone el alcance lanzando una excepción? No pensé que ese fuera el caso, pero por supuesto podría estar equivocado. – Coderer
Sí, está garantizado. De hecho esa es la idea aquí. Los descriptores de los objetos asignados a la pila se invocan cuando finaliza el alcance adjunto (ya sea de forma regular o prematura por una excepción), en realidad eso no tiene nada que ver con la gestión o no. También es así en código nativo. –
@ Christian.K, ¿está seguro de "a menos que, opcionalmente, pase la referencia a otro lugar"? Creo que ese ejemplo (1) estaría bien incluso en ese caso. – JoelFan