Ссылка:
В C++ можно передавать параметры в функцию по значению (func2) и по ссылке (func1):
void func1 ( A& a );
void func2 ( A a );
Здесь кроется засада: в func2 внутрь функции передается на самом деле не a, а его копия. Т.е сначала вызывается copy-constructor, а по возвращении еще и деструктор.
Это может привести к очень большим затратам на создание и уничтожение вот этих временных объектов. Если объект достаточно "тяжеловесный" или операция проводится в цикле, то затраты могут оказаться очень большими. Это же объясняет и тормознутость в куче мест STL.