Foros del Web » Programación para mayores de 30 ;) » .NET »

[SOLUCIONADO] Punteros nativos en clases administradas (c++/cli)

Estas en el tema de Punteros nativos en clases administradas (c++/cli) en el foro de .NET en Foros del Web. Hola a todos. Mi pregunta es si es necesario o conveniente declarar e implementar destructores en clases administradas de C++/CLI (ref class) en caso de ...
  #1 (permalink)  
Antiguo 25/07/2014, 10:06
 
Fecha de Ingreso: febrero-2014
Mensajes: 55
Antigüedad: 10 años, 1 mes
Puntos: 3
Punteros nativos en clases administradas (c++/cli)

Hola a todos.

Mi pregunta es si es necesario o conveniente declarar e implementar destructores en clases administradas de C++/CLI (ref class) en caso de usar punteros nativos (punteros de C/C++) en éstas.

En caso afirmativo:
- Se puede decir que el garbage collector del .NET no "borra" los punteros nativos de C/C++, ¿correcto?
- En dichos destructores no hay que borrar los "managed pointers"
(String^ ejemplo) ¿correcto?

También me gustaría saber si el destructor de una clase administrada A ( A::~A() ) es llamado automáticamente al finalizar el main.

Gracias y saludos.
  #2 (permalink)  
Antiguo 31/07/2014, 03:29
 
Fecha de Ingreso: febrero-2014
Mensajes: 55
Antigüedad: 10 años, 1 mes
Puntos: 3
Respuesta: Punteros nativos en clases administradas (c++/cli)

Tras investigar, me autocontesto:

En C++/CLI, aparted e los clásicos dstructores de C++ hay "Finalizadores", que se designan mediante el símnolo '!', por ej. para una clase 'A' su finalizador sería !A().

En finalizador es el que debe borrar todos los recursos no administrados (punteros nativos).

El destructor debe borrar TODOS los recursos, administrados o no, y para no recplicar código desde el destructor llamamos al finalizador.

Y eso es todo, adjunto un par de links que pueden ayudar:
http://msdn.microsoft.com/en-us/libr...v=vs.100).aspx
http://social.msdn.microsoft.com/For...orum=vcgeneral

Saludos.

PD. respecto a las preguntas de arriba:
1 - El garbage collector de .NET NO borra los recursos no administrados (native pointers) ( de hecho creo que están en heaps distintos)
2 - En el clásico destructor, SI hay que borrar los recursos administrados (managed pointers).
3 - He probado a llamar, al finalizar el main, al destructor de mi clase A ( ~A() ), y no ha habido error, de lo deduzco que, al finalizar el main, los destructores de las clases administradas NO son llamados. (Recordemos que en C++, si llamamos al destructor de clase al finalizar el main, esto causa un error por hacer delete 2 veces sobre el mismo objeto).

Etiquetas: clase, clases, net, punteros
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:37.