Russian Qt Forum
Ноябрь 27, 2024, 18:21 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2] 3   Вниз
  Печать  
Автор Тема: Выход с приложения  (Прочитано 17086 раз)
blood_shadow
Гость
« Ответ #15 : Август 12, 2010, 20:18 »

Don't use exeptions? Улыбающийся
вы в своем уме?

blood_shadow, не в курсе какая у вас версия Qt, и откуда вы ее брали, но стОит посмотреть содержание configure.cache на предмет "-exception"
в ранних версиях исключения были отключены по дефолту. приходилось пересобирать.


Все уже разобрался, когда собирал статически указал опцию configure -static -release -no-exceptions, потому их и не было, решил добавлением в pro-файл CONFIG += exceptions. И тут появилась сделующая проблема
Код:
int main(int argc, char *argv[])
{
    QCoreApplication* app = new QCoreApplication(argc, argv);
    QString DirPath = app->QCoreApplication::applicationDirPath();
    try { String_value obj(DirPath); }
    catch (int i) { cout << "Oshibka";}
    cout << "End" << endl;
    delete app;
    system("PAUSE");
    return 0;
}
исключение вызывается с конструктора, выполняется программа нормально, даже выводит "End", но по завершению выбивает APPCrash и стандартный виндузовый обработчик ((
Записан
niXman
Гость
« Ответ #16 : Август 12, 2010, 20:31 »

Цитировать
QCoreApplication* app = new QCoreApplication(argc, argv);
не нужно такого делать, это вам не жаба.

и этого не нужно делать:
Цитировать
return 0;
вы должны вернуть результат метода "exec()"
Записан
blood_shadow
Гость
« Ответ #17 : Август 12, 2010, 20:35 »

Цитировать
QCoreApplication* app = new QCoreApplication(argc, argv);
не нужно такого делать, это вам не жаба.

и этого не нужно делать:
Цитировать
return 0;
вы должны вернуть результат метода "exec()"


1. Можете объяснить почему?
2. Я не использую обработчик событий, мне достаточно одиночного исполнения
Записан
niXman
Гость
« Ответ #18 : Август 12, 2010, 20:46 »

Цитировать
1. Можете объяснить почему?
потому что с++ умеет сам создавать автоматические переменные любых типов.

Цитировать
2. Я не использую обработчик событий, мне достаточно одиночного исполнения
а накер вам тогда Qt?  Подмигивающий
Записан
blood_shadow
Гость
« Ответ #19 : Август 12, 2010, 20:53 »

Цитировать
1. Можете объяснить почему?
потому что с++ умеет сам создавать автоматические переменные любых типов.

Цитировать
2. Я не использую обработчик событий, мне достаточно одиночного исполнения
а накер вам тогда Qt?  Подмигивающий
1. та я проникся идеей указателей на объекты и начал везде где можно их сувать, а потом память затирать  Смеющийся
2. эт часть одной большой проги, которой ненужна qt, графическая часть qt уже готова, раньше она запускала екзешник, который был написан на чистом С++, а теперь я решил все интегрировать в одну программу  Улыбающийся
Записан
niXman
Гость
« Ответ #20 : Август 12, 2010, 21:08 »

Цитировать
1. та я проникся идеей указателей на объекты и начал везде где можно их сувать, а потом память затирать
плохая привычка.
собственно на этом форуме мало кто знает что такое с++. от того, все пишут на Qt Смеющийся ну поди расскажи дураку, что Qt это не ЯП, и тем более, что компилятор лучше программиста умеет выделять и освобождать память. я уже не говорю про накладные расходы при работе с объектами лежащими в куче.
Записан
blood_shadow
Гость
« Ответ #21 : Август 12, 2010, 21:14 »

Цитировать
1. та я проникся идеей указателей на объекты и начал везде где можно их сувать, а потом память затирать
плохая привычка.
собственно на этом форуме мало кто знает что такое с++. от того, все пишут на Qt Смеющийся ну поди расскажи дураку, что Qt это не ЯП, и тем более, что компилятор лучше программиста умеет выделять и освобождать память. я уже не говорю про накладные расходы при работе с объектами лежащими в куче.
Ясно, можно тогда совет, когда выделять память с помощью указателей, а когда просто статически создавать объекты? Улыбающийся
Записан
BRE
Гость
« Ответ #22 : Август 12, 2010, 21:16 »

я уже не говорю про накладные расходы при работе с объектами лежащими в куче.
Что имеется ввиду?
Записан
niXman
Гость
« Ответ #23 : Август 12, 2010, 21:24 »

я уже не говорю про накладные расходы при работе с объектами лежащими в куче.
Что имеется ввиду?
уровневую косвенность адресации.
Записан
BRE
Гость
« Ответ #24 : Август 12, 2010, 21:26 »

уровневую косвенность адресации.
niXman, а можно попроще.  Подмигивающий
Ты о чем?
Записан
niXman
Гость
« Ответ #25 : Август 12, 2010, 21:29 »

Цитировать
1. та я проникся идеей указателей на объекты и начал везде где можно их сувать, а потом память затирать
плохая привычка.
собственно на этом форуме мало кто знает что такое с++. от того, все пишут на Qt Смеющийся ну поди расскажи дураку, что Qt это не ЯП, и тем более, что компилятор лучше программиста умеет выделять и освобождать память. я уже не говорю про накладные расходы при работе с объектами лежащими в куче.
Ясно, можно тогда совет, когда выделять память с помощью указателей, а когда просто статически создавать объекты? Улыбающийся
динамически выделять, нужно в том случае, когда время жизни объекта, должно быть больше блока кода, в котором происходит создание/выделение объекта. но и в этом случае не обязательно выделять память. существуют методики, позволяющие "схитрить" перед компилятором.
к примеру, у меня есть куча проектов(и больших) в которых нет ни одного new или delete.

собственно, это не критическая ошибка, это происходит по незнанию.
Записан
niXman
Гость
« Ответ #26 : Август 12, 2010, 21:30 »

уровневую косвенность адресации.
niXman, а можно попроще.  Подмигивающий
Ты о чем?
вам наверняка знаком термин "косвенность адресации".
Записан
BRE
Гость
« Ответ #27 : Август 12, 2010, 21:33 »

вам наверняка знаком термин "косвенность адресации".
Конечно.
Только причем здесь это?
Код
C++ (Qt)
char *buf = new char[ 100 ];
// buf - это конкретный адрес в памяти процесса и при доступе к этому буферу никакой косвенности нет.*
*buf = 1;
 
Записан
BRE
Гость
« Ответ #28 : Август 12, 2010, 21:36 »

Кстати и хип и стек находятся в одном и том же адресном пространстве, только в разных областях. И доступ к стеку выполняется также как и к хипу.
Я бы еще подумал про скорость выделения буфера в стеке и в хипе, но там тоже не все так просто. А вот про накладные расходы при работе...
« Последнее редактирование: Август 12, 2010, 21:39 от BRE » Записан
blood_shadow
Гость
« Ответ #29 : Август 12, 2010, 21:41 »

динамически выделять, нужно в том случае, когда время жизни объекта, должно быть больше блока кода, в котором происходит создание/выделение объекта. но и в этом случае не обязательно выделять память. существуют методики, позволяющие "схитрить" перед компилятором.
к примеру, у меня есть куча проектов(и больших) в которых нет ни одного new или delete.

собственно, это не критическая ошибка, это происходит по незнанию.
Немного не понял, например у нас есть только одна ф-ция main.cpp в которой мы создаем объект так зачем нам может понадобится объект, время жизни которого будет больше чем самой программы? не могу даже придумать конкретное применение и тут другой вопрос возникает как мы освободим память, если программа завершилась?
Записан
Страниц: 1 [2] 3   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.131 секунд. Запросов: 20.