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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удаление лок. объектов: C++ и OC 
:(
    Опции темы
FCM
Дата 4.10.2009, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 9



При выходе из программы по abort или exit, как известно локальные объекты не удаляются.
Делает ли это Windows при закрытии соответствующего процесса/потока.
Т.е. правильно ли следующее утверждение или нет:
"При использовании С++ исключений объекты удаляются средствами С++, 
а при использовании abort или exit веcь мусор уберет Windows ???"
PM MAIL   Вверх
zim22
Дата 4.10.2009, 11:05 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 24
Всего: 69



Цитата(FCM @  4.10.2009,  10:50 Найти цитируемый пост)
как известно локальные объекты не удаляются.

также, как известно, можно сделать так, чтобы они удалялись.
Код

#include <iostream>

class X {
public:
  X() { std::cout << "X" << std::endl; }
  ~X() { std::cout << "~X" << std::endl; }
};

class HolyCrap {
public:
  enum status {TERMINATE, CONTINUE};
  HolyCrap(status s) : st(s) { }  
  status st;
};

void fcn() {
  X x;
  throw HolyCrap(HolyCrap::TERMINATE);  
}
int main()
try
{
  fcn();
  return 0;
}
catch(HolyCrap &ex) {
  switch(ex.st) {
    case HolyCrap::TERMINATE: exit(-1); break;
    case HolyCrap::CONTINUE: return 0; break;
    default: return -1; break;
  }
}



Это сообщение отредактировал(а) zim22 - 4.10.2009, 11:06


--------------------
PM MAIL   Вверх
GoldFinch
Дата 4.10.2009, 11:20 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 15
Всего: 26



FCM, о каких объектах речь?
при закрытии программы все что было в памяти - удаляется
PM MAIL ICQ   Вверх
Lazin
Дата 4.10.2009, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



Цитата(GoldFinch @  4.10.2009,  11:20 Найти цитируемый пост)
при закрытии программы все что было в памяти - удаляется

не все, бывают и исключения
PM MAIL Skype GTalk   Вверх
GoldFinch
Дата 4.10.2009, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 15
Всего: 26



Lazin, какие?

разве что объект создал файл, а в деструкторе должен был его удалить

PM MAIL ICQ   Вверх
Lazin
Дата 4.10.2009, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



Global Atom-ы и COM объекты иногда не могут быть удалены после завершения процесса, может еще что-нибудь
PM MAIL Skype GTalk   Вверх
Alexeis
Дата 4.10.2009, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 12
Всего: 459



Цитата(Lazin @  4.10.2009,  13:21 Найти цитируемый пост)
Global Atom-ы и COM объекты иногда не могут быть удалены после завершения процесса, может еще что-нибудь

  Память выделенная в драйвере сама не освобождается, даже если драйвер выгрузили.

Добавлено через 52 секунды
  Кстати если юзать SEH то не деструкторы локальных объектов могут быть не вызванными. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Lazin
Дата 4.10.2009, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



Цитата(Alexeis @  4.10.2009,  14:25 Найти цитируемый пост)
Кстати если юзать SEH то не деструкторы локальных объектов могут быть не вызванными

смотря как юзать...
PM MAIL Skype GTalk   Вверх
GoldFinch
Дата 4.10.2009, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 15
Всего: 26



Alexeis, SEH позволяет делать finally, и возвращать управление в любое место кода
PM MAIL ICQ   Вверх
FCM
Дата 4.10.2009, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 9



Цитата(GoldFinch @  4.10.2009,  11:20 Найти цитируемый пост)
FCM, о каких объектах речь?

Обычные объекты пользовательского класса, например, реализующего динамический массив.

В одной (видимо учебной) программе увидел реализацию такого массива, причем в качестве  контроля правильности значения индекса используется что-то типа if( ...) abort();
Понятно, что с С++ исключениями правильнее. 
Вопрос в другом, а почему abort, а не exit - есть ли разница?
В любом случае ОС зачистит все или нет?

Это сообщение отредактировал(а) FCM - 4.10.2009, 15:20
PM MAIL   Вверх
GoldFinch
Дата 4.10.2009, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 15
Всего: 26



FCM, все объекты в памяти которые принадлежат приложению, будут удалены
PM MAIL ICQ   Вверх
zim22
Дата 4.10.2009, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 24
Всего: 69



Цитата(FCM @  4.10.2009,  15:19 Найти цитируемый пост)
Вопрос в другом, а почему abort, а не exit - есть ли разница?

угу, есть.
при abort не вызываются деструкторы статических объектов.


--------------------
PM MAIL   Вверх
maxim1000
Дата 4.10.2009, 22:12 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 17
Всего: 110



система не удаляет никаких объектов, она освобождает ресурсы, которые программа не освободила (память, дескрипторы открытых файлов)

удаление объекта предусматривает вызов деструктора, это может сделать только код программы, т.к. ОС не может знать про деструкторы (на уровне ассемблера их уже нет)


--------------------
qqq
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0960 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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