Добрый день, мои дорогие любители указателей и множественного наследования.
Каждый пользователь Qt очень часто в своей жизни сталкивается с подобным кодом:
int main( int argc, char** argv)
{
QApplication app( argc, argv);
int result = app.exec();
return result;
}
Этот тривиальный пример стал настолько близким и родным каждому, кто пишет код на C++/Qt, что вопросов по его работе не возникает ни у кого. Но давайте попробуем окунуться немного глубже и рассмотрим вот такой пример:
QApplication* createApplication( int argc, char** argv)
{
QApplication* result = new QApplication( argc, argv);
return result;
}
int main( int argc, char** argv)
{
QApplication* app = createApplication( argc, argv);
int result = app->exec();
delete app;
return result;
}
Прошу вас, не пытайтесь повторить этот трюк в реальных приложениях. В особенности, если от них зависит жизнь и здоровье людей (хотя бы разработчиков), т.к. этот код приводит к undefined behavivor.
Первый, кто сможет объяснить почему, получит в награду картонную медаль и общественное признание, как человек, глубоко знающий работу любимой многими библиотеки.
Итак, ждем нашего победителя.
---
Наш победитель: slovazap
Осторожно, ниже в треде есть ответы. Если вы хотите сами найти решение - не читайте тред до конца.