Должен ли "удалить это" вызываться из метода-члена? - PullRequest
20 голосов
/ 07 декабря 2009

Я только что прочитал эту статью и хотел ТАК народный совет:

В: Должен ли delete this; вызываться из метода-члена?

Ответы [ 12 ]

0 голосов
/ 07 декабря 2009

Да. Как и во всех ответах, если вы на 100% уверены, что данные класса не будут использованы после вызова delete this.

Например, в одном проекте:

void Test()
MyClass * Someclass = new MyClass;
SomeClass->DoYourThing();
SomeClass->KillYourself();
return;

void MyClass::DoYourThing() { return; }
void MyClass::KillYourself() {delete this;}

Очень упрощенное объяснение, проект использовал delete this; как часть управления памятью для объектов этого типа; их конструктор добавил их в закрытый список используемых классов этого типа и удалил себя из этого списка, когда они были уничтожены, а затем удалили себя (это не было в деструкторе). Любые объекты этого класса, которые не удалили себя, когда программа достигла своей конечной точки, получили эквивалент KillYourself() из статической функции-члена CleanYourselves()

0 голосов
/ 07 декабря 2009

Вы можете сделать это при условии, что это последний элемент в функции-члене, и что после возврата вы забудете, что объект когда-либо существовал ... но да, как эта статья спрашивает ... Зачем вам это нужно? Я не знаю, что говорит стандарт, но это вызывает у меня странное чувство: P

Полагаю, это немного похоже на использование оператора GOTO, и я лично использую GOTO для очистки ресурсов в C иногда, особенно в исключительных условиях.

Интересно, каковы значения общего состояния (нечеткое утверждение, которое я знаю): P

...