crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Гарантия на деструктор.
call_me_Frank
  опции профиля:
сообщение 21.11.2013, 17:26
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 73
Регистрация: 20.10.2010
Пользователь №: 2129

Спасибо сказали: 0 раз(а)




Репутация:   0  


Господа, есть вопрос. Насколько можно быть уверенным в том, что при закрытии приложения (не аварийном) будут выполнены все команды в деструкторе объекта?

Пример:
int main(int argc, char *argv[]){
    //

    QApplication a(argc, argv);
    //QApplication::setQuitOnLastWindowClosed(false);

    // GUI
    MainWindow w;
    w.show();

    Mainy *my = new Mainy(&a);

    return a.exec();
}


Mainy - класс-наследник от QObject, его деструктор:
Mainy::~Mainy(){
    //

    qDebug() << "~Mainy() ";
}


сообщение выводится в 50% случаев закрытия.

я не знаю, как работает дебаг, но у меня из-за этого серьезные опасения насчет того, что половина инструкций внутри деструктора может просто не выполниться...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
call_me_Frank
  опции профиля:
сообщение 22.11.2013, 7:26
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 73
Регистрация: 20.10.2010
Пользователь №: 2129

Спасибо сказали: 0 раз(а)




Репутация:   0  


Хорошо, деструктор вызывается в 100% случаев без исключений. Но вывод функции qDebug() случается далеко не каждый раз. Почему? Я предполагаю, что вызвав qDebug(), программа в итоге завершается быстрее, чем производится сам вывод. Все бы ничего - черт с ним с дебагом, но меня беспокоит то, что вероятно есть и другие функции, которые будут вести себя подобным же образом. И как в таком случае проследить 100-процентное выполнение всех до полного завершения? Работать в режиме отладки возможности нет, т.к. использую либы, которые этот режим не поддерживают и портят всю малину.

Насчет delete. В данном примере я рассчитываю на то, что об этом позаботится родитель моего объекта (&a). Или я не прав? В таком случае, где же разместить delete my, чтобы он вызывался при закрытии программы? Делать для этого отдельный класс с соотв. слотом неохота...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.11.2024, 21:39