«eliminar esto» en C++

Idealmente, el operador de eliminación no debe usarse para este puntero. Sin embargo, si se usa, se deben considerar los siguientes puntos.
1) el operador de eliminación funciona solo para objetos asignados usando el operador nuevo (Ver esta publicación ). Si el objeto se crea usando new, entonces podemos hacer delete this , de lo contrario, el comportamiento no está definido.
 

CPP

class A
{
  public:
    void fun()
    {
        delete this;
    }
};
 
int main()
{
  /* Following is Valid */
  A *ptr = new A;
  ptr->fun();
  ptr = NULL; // make ptr NULL to make sure that things are not accessed using ptr.
 
 
  /* And following is Invalid: Undefined Behavior */
  A a;
  a.fun();
 
  getchar();
  return 0;
}

2) Una vez que se haya eliminado , no se debe acceder a ningún miembro del objeto eliminado después de la eliminación.
 

CPP

#include<iostream>
using namespace std;
 
class A
{
  int x;
  public:
    A() { x = 0;}
    void fun() {
      delete this;
 
      /* Invalid: Undefined Behavior */
      cout<<x; // this is working
    }
};
 
int main()
{
  A* obj = new A;
  obj->fun();
  return 0;
}
Producción

0

Lo mejor es no borrar esto en absoluto.
Gracias a Shekhu por proporcionar los detalles anteriores.
Referencias: 
https://www.securecoding.cert.org/confluence/display/cplusplus/OOP05-CPP.+Avoid+deleting+this  
http://en.wikipedia.org/wiki/This_%28computer_science%29
Este artículo es aportado por Rahul Gupta . Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *