Notice that in C++, suppose we have a class whose name is Damn, then the code:
Damn d;
does not equal
Damn *d = new Damn();
The second code refers to initiate a new instance for Damn pointer d.
But "Damn d;" automatically initiate a instance for the class Damn -- d.
In addition, using -> when d is a pointer, using . when d is a real instance.
Take care of the value pass in pointers. "=" operator for pointers only transfer the address. So if the real instance changes, the whole references of pointers change.
PAY ATTENTION TO ASSIGNMENT IN POINTERS
And the pointer cannot be assigned to a instance, but a instance 's address can be assigned to a pointer. In the linked list and linked tree, we use pointers to refer next/prior node(s), and use "new" to initiate a new instance, then use "*next" to refer it.