Рубрики

«Удалить это» в C ++

В идеале оператор удаления не должен использоваться для этого указателя. Однако, если используется, то следует учитывать следующие моменты.

1) оператор удаления работает только для объектов, выделенных с помощью оператора new (см. Этот пост ). Если объект создан с использованием new, то мы можем удалить это , иначе поведение не определено.

class A

{

  public:

    void fun()

    {

        delete this;

    }

};

  

int main()

{

  / * Подписка действительна * /

  A *ptr = new A;

  ptr->fun();

  ptr = NULL; // сделать ptr NULL, чтобы убедиться, что вещи не доступны с помощью ptr.

  

  

  / * И следующее недействительно: неопределенное поведение * /

  A a;

  a.fun();

  

  getchar();

  return 0;

}

2) После того, как это будет сделано, доступ к любому члену удаленного объекта не должен осуществляться после удаления.

#include<iostream>

using namespace std;

  

class A

{

  int x;

  public:

    A() { x = 0;}

    void fun() {

      delete this;

  

      / * Неверно: Неопределенное поведение * /

      cout<<x;

    }

};

Лучше всего вообще не удалять это .

Спасибо Шеху за предоставленную выше информацию.

Ссылки:
https://www.securecoding.cert.org/confluence/display/cplusplus/OOP05-CPP.+Avoid+deleting+this
http://en.wikipedia.org/wiki/This_%28computer_science%29

Эта статья предоставлена Рахул Гупта . Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

«Удалить это» в C ++

0.00 (0%) 0 votes