Переменная app
создается в стеке в строке QApplication app(argc, argv);
, она вызывает конструктор QApplication
с аргументами argc
и argv
, который создает QApplication
объект с именем app
в этом случае.
Это не особенность, характерная для Qt.Таким же образом вы можете выделить любой не виртуальный класс с помощью конструктора.Кроме того, он работает с примитивами, поэтому вы можете сделать, например, следующее:
int val(1); // Equivalent to: int val = 1;
, что создаст целочисленную переменную с именем val
со значением 1.
Вы можете разместить объект QApplication в куче.используя new
и используйте его следующим образом:
QApplication* app = new QApplication(argc, argv); // Heap allocation
app->setOrganizationName("My Company"); // Notice the -> instead of .
app->setApplicationName("The App");
->
- это, по сути, ярлык для разыменования указателя, и использование .
Распределение в стеке обычно предпочтительнее (но не всегда выполнимо), потому что тогда вам не нужно заботиться о времени жизни объекта (с помощью какого-нибудь умного указателя или необработанного delete
), выделение стека также обычно дешевле, чем выделение в куче.