Изменяемые объекты могут быть опасны при передаче в функции из-за возможного повреждения исходного объекта. 2
При передаче объекта в функцию создаётся его копия, и эта копия, а не сам объект, будет далее использоваться функцией. 12 Когда работа функции завершается, копия переданного объекта будет разрушена, при этом будет вызван деструктор копии. 1
Опасность заключается в том, что деструктор копии освободит память. 1 Если переданный в качестве параметра объект содержит в себе указатель на динамически выделенную область памяти, деструктор копии её освободит. 1 Так как копия создавалась побитовым копированием, деструктор копии высвободит область памяти, на которую указывал объект-оригинал. 1 Исходный объект будет по-прежнему «видеть» свои данные по указанному адресу, однако для системы эта память будет считаться свободной. 1 Рано или поздно она будет выделена какому-то другому объекту, и данные окажутся затёрты. 1
Кроме того, если объект, используемый как аргумент, резервирует память и освобождает эту память при своём уничтожении, тогда его локальная копия внутри функции освободит ту же самую память при вызове деструктора. 2 В результате исходный объект окажется повреждённым и по существу бесполезным. 2