Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > "delete this" в функции класса


Автор: gepard 30.5.2005, 03:50
Будет ли это правильно? Может ли класс нормалдьно удалить сам себе из своей же функции.

Автор: Domestic Cat 30.5.2005, 03:57
Может, только это сработает если объект былл создан через new, т.е. на хипе. Если он был создан на стеке, то поведение в током случае не определено (афаик).

Автор: chipset 30.5.2005, 04:09
Цитата(Domestic @ 29.5.2005, 17:57)
Может, только это сработает если объект былл создан через new, т.е. на хипе. Если он был создан на стеке, то поведение в током случае не определено (афаик).

Честно говоря я не думаю так.
Я на практике не проверял - но теоретически предполагаю что будет access violation при выходе из блока функции, ибо класс то удалили а функции надо возвращать что-то, а если ещё и какие-то операции с классом будут то... :\
Сейчас проверю на практике.
ЗЫ. В любом случае - так делать нельзя ибо это жутко нехороший тон.

Автор: Domestic Cat 30.5.2005, 04:11
Цитата(chipset @ 29.5.2005, 19:09)
ибо класс то удалили

smile Это как?



Автор: chipset 30.5.2005, 04:14
Цитата(Domestic @ 29.5.2005, 18:11)
smile Это как?

Обьект smile
Добавлено @ 04:20
Можно smile
Код

class foo
{
    public:
    int a;
int    delete_it()
{
    a = 7;
    cout<<"Before "<<a<<endl;
    delete this;
    a = 2;
    cout<<"After "<<a<<endl;

    return 2;
}
};

- скомпилировалось и запустилось и созданное на стёке и в куче.
Только вот результат был:
Цитата

Before 7
After 0

Т.е. обьект уничтожился.
В любом случае - я так крайне не рекомендую делать smile

Автор: gepard 30.5.2005, 04:24
chipset
Мерси smile

Автор: Domestic Cat 30.5.2005, 04:25
Цитата(chipset @ 29.5.2005, 19:14)
В любом случае - я так крайне не рекомендую делать smile


http://www.cuj.com/documents/s=8188/cuj0407j/

Автор: gepard 30.5.2005, 06:21
Прикольно пишут...

Автор: Fantasist 1.6.2005, 06:06
Цитата(chipset @ 30.5.2005, 01:14)
В любом случае - я так крайне не рекомендую делать


Ну привет. А как же самоудаление с подсчетом ссылок? COM на этом базируется. Опять же бывают случаи, когда удобнее определить метод у класса, который удаляет себя, нежели делать это в коде явно (например, для абстрагирования от способа удаления). Это вполне нормально, надо просто понимать, что происходит.


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)