If you create an instance of the class as an argument, the instance is created the same way as any other instance - in SRAM. SRAM consists of 2 parts - the heap and the stack. The stack grows from one end of SRAM. The heap grows from the other. When they pass each other, bad things happen.
Passing the object requires that it be copied to the stack. Passing a pointer to the object does not. Only the pointer is copied. If memory is an issue, using new and getting a pointer to the instance of the class, and passing that pointer around is a better idea.
The same applies to non-class objects, except that using new and getting a pointer are usually not recommended. A two byte pointer doesn't save much stack space over a 4 byte float.