Can anyone tell me what the difference is between:
Display *disp = new Display();
and
Display *disp;
disp = new Display();
The first case:
Display *disp = new Display();
Does three things:
disp, with the type Display*, that is, a pointer to an object of type Display, and thenDisplay object on the heap, anddisp variable to point to the new Display object.In the second case:
Display *disp; disp = new GzDisplay();
You create a variable disp with type Display*, and then create an object of a different type, GzDisplay, on the heap, and assign its pointer to the disp variable.
This will only work if GzDisplay is a subclass of Display. In this case, it looks like an example of polymorphism.
Also, to address your comment, there is no difference between the declarations:
Display* disp;
and
Display *disp;
However, because of the way C type rules work, there is a difference between:
Display *disp1;
Display* disp2;
and
Display *disp1, disp2;
Because in that last case disp1 is a pointer to a Display object, probably allocated on the heap, while disp2 is an actual object, probably allocated on the stack. That is, while the pointer is arguably part of the type, the parser will associate it with the variable instead.