Programación General > C/C++
Apuntar A Null Al Destruir
Diodo:
Hola
Como podria hacer para que al destruir un objeto su puntero se quede apuntando a NULL
El caso es este:
--- Código: Text --- objeto *obj1=new objeto();delete obj1; // Aqui el puntero se queda apuntado a algo que no es NULLif(obj1==NULL)printf("es null"); // y aqui no me caza los NULL
He probado en el destructor pero no se muy bien como hacerlo
Gracias y salu2
JuanK:
<!--xc1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>XCODE </td></tr><tr><td id='XCODE'><!--exc1-->objeto *obj1=new objeto();
delete obj1;
obj1 = NULL;
if(obj1==NULL)printf("es null"); <!--xc2--></td></tr></table><div class='postcolor'><!--exc2-->
O bien sobrecargar el operador delete (no se si C++ lo permita), o crear tu función
<!--xc1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>XCODE </td></tr><tr><td id='XCODE'><!--exc1-->
public static void Delete(object obj)
{
delete obj;
obj = NULL
}
...
objeto *obj1=new objeto();
Delete(obj1);
if(obj1==NULL)printf("es null");
...<!--xc2--></td></tr></table><div class='postcolor'><!--exc2-->
Diodo:
Si, lo que probe fue esto:
--- Código: Text --- void SMRentorno::operator delete( void *p ){ free(p); p=NULL;}
pero no me cambia el ptro a NULL
Eternal Idol:
Solo podria hacerlo si tuvieras un doble puntero (o una referencia que es el mismo), como tenes un puntero solo podes cambiar su contenido mas no su direccion ya que dentro de la funcion es una variable local (en pila).
Que yo sepa la unica forma valida de sobrecargar delete es esta:
void operator delete(void*);
Con lo cual no podes hacerlo asi ...
Una manera un poco pobre:
--- Código: Text --- #define Borrar(x)\delete x;\x = 0;
Pero igual no se si tiene mucho sentido lo que queres hacer.
JuanK:
:lol: ya me acostumbre a la semántica de C# <_<
Bueno el problema viene siendo entonces de apuntadores no?
Seria algo asi:
--- Código: Text ---public static void Delete(void **obj){ delete *obj; *obj = NULL} ...objeto *obj1=new objeto();Delete(&obj1);if(obj1==NULL)printf("es null");...
:rolleyes:
Navegación
[#] Página Siguiente
Ir a la versión completa