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