Difference between creating object with () or without
The other answers correctly state that the parentheses version is actually a function declaration. To understand it intuitively, suppose you wrote MainGUIWindow f();
Looks more like a function, doesn't it? :)
The more interesting question is what is the difference between
MainGUIWindow* p = new MainGUIWindow;
and
MainGUIWindow* p = new MainGUIWindow();
The version with parentheses is called value-initialization, whereas the version without is called default-initialization. For non-POD classes there is no difference between the two. For POD-structs, however, value-initialization involves setting all members to 0,
my2c
Addition: In general, if some syntactic construct can be interpreted both as a declaration and something else, the compiler always resolves the ambiguity in favor of the declaration.
The following:
MainGUIWindow myWindow();
declares a function that takes no arguments and returns MainGUIWindow
. I.e. myWindow
is a function name.
MainGUIWindow myWindow;
on the other hand creates an object myWindow
of type MainGUIWindow
.
The difference is, that
MainGUIWindow myWindow();
declares function myWindow
, which takes no parameters and returns MainGUIWindow
, whereas
MainGUIWindow myWindow;
creates new object of type MainGUIWindow
, calling it's default constructor.