Почитал в доке куте, что QMessageBox msgBox; фактически создает статический объект в стеке.
куте |
---|
As you have recognized already there are different ways to use QMessageBox. The static method is for displaying a message box quickly. IMHO it is more a matter of taste and preference which you are using. However, the non-static methods you are referring are different from the location where you are placing the instance. The first method uses the stack for the complete object. The second method is using the heap |
Так в принципе понятно, идем дальше, самое интересное в словах
куте |
---|
The first method uses the stack for the complete object. |
Открываю исходники QMessageBox.h и ищу слово static. В итоге ничего напоминающего на создание статического объекта в стеке - нет. Т.е. я ожидал что статический стековый объект - будет глобальным
stackoverflow |
---|
A static variable is basically a global variable, even if you cannot access it globally. Usually there is an address for it that is in the executable itself. There is only one copy for the entire program. No matter how many times you go into a function call (or class) (and in how many threads!) the variable is referring to the same memory location. |
И поэтому использование
QMessageBox msgBox;
плохой тон ввиду потоков и проч, ввиду того что объект один глобально.
Поправьте меня если я не прав. После этого не охота практиковать использование QMessageBox без new.
Также получается что фраза из приведенного выше текста
автор |
---|
.. uses the stack for the complete object .. |
не верна. Потому что объект
static variable is basically a global variable - т.е. объект все таки в хипе, а ссылка на него в стеке - так ?