All variables (primitive numeric types, class instances, pointers, references) start out taking up space.
Then the optimizer gets involved, and may show that some storage is redundant (the value is constant, or always available from another variable, etc)
Making variables disappear is one of the explicit goals of the optimizer because it tends to reduce register pressure, improve cache performance, etc.
In your example, the pointer intThing
would be destroyed (it's a member and members die when their parent object does), but the memory it points to (which would correctly be called *thingy.intThing
and not just thingy.intThing
) will not. If its address is not stored anywhere else, then it would be leaked.