Cogman's answer is a good one. If you're thinking clearly about what's going on, then each of these things you're creating is an object. The first thing that gets created is a scalar value that holds an address, i.e. a pointer. We can't tell from your example where it gets created, but it is probably a local variable inside a function and lives on the stack. You then assign the return value of the new operator to that pointer. The new operator allocates memory on the heap for your class instance, and causes its constructor to execute, then returns the address of the allocated memory.