Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> "delete this" в функции класса, ... 
:(
    Опции темы
gepard
  Дата 30.5.2005, 03:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2477
Регистрация: 29.2.2004

Репутация: 2
Всего: 40



Будет ли это правильно? Может ли класс нормалдьно удалить сам себе из своей же функции.


--------------------
Когда начинаются цифровые войны, а траффик разносит моё сознание по бесконечным просторам инета, подобно ветру, разносящему листву по полям, тогда и только тогда я чувствую себя свободным!
© Я, Берсерк, что значит - Неистовый. 
PM MAIL WWW ICQ   Вверх
Domestic Cat
Дата 30.5.2005, 03:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 3
Всего: 172



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


--------------------

PM   Вверх
chipset
Дата 30.5.2005, 04:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: 27
Всего: 164



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

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


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Domestic Cat
Дата 30.5.2005, 04:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 3
Всего: 172



Цитата(chipset @ 29.5.2005, 19:09)
ибо класс то удалили

smile Это как?





--------------------

PM   Вверх
chipset
Дата 30.5.2005, 04:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: 27
Всего: 164



Цитата(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


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
gepard
Дата 30.5.2005, 04:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2477
Регистрация: 29.2.2004

Репутация: 2
Всего: 40



chipset
Мерси smile


--------------------
Когда начинаются цифровые войны, а траффик разносит моё сознание по бесконечным просторам инета, подобно ветру, разносящему листву по полям, тогда и только тогда я чувствую себя свободным!
© Я, Берсерк, что значит - Неистовый. 
PM MAIL WWW ICQ   Вверх
Domestic Cat
Дата 30.5.2005, 04:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 3
Всего: 172



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


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


--------------------

PM   Вверх
gepard
Дата 30.5.2005, 06:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2477
Регистрация: 29.2.2004

Репутация: 2
Всего: 40



Прикольно пишут...


--------------------
Когда начинаются цифровые войны, а траффик разносит моё сознание по бесконечным просторам инета, подобно ветру, разносящему листву по полям, тогда и только тогда я чувствую себя свободным!
© Я, Берсерк, что значит - Неистовый. 
PM MAIL WWW ICQ   Вверх
Fantasist
Дата 1.6.2005, 06:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: 4
Всего: 41



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


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




--------------------
Волны гасят ветер...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0766 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.