Each time you pass an object into a function by value, a copy of the object is made. Each time you return an object from a function by value, another copy is made.
With larger, user-created objects, the cost of these copies is substantial. You'll use more memory than you need to, and ultimately your program will run more slowly.
The size of a user-created object on the stack is the sum of each of its member variables. These, in turn, can each become user-created objects. Passing such a massive structure by copying it onto the stack can be very expensive in terms of performance and memory consumption.
There is another cost as well. With the classes you create, each of these temporary copies is created when the ...