А шаги переставлены, что бы возможные ошибки не приводили к краху всей системы.
То есть сначала выделяем память, если не получилось, то EOutOfMemory, но старая строка остаётся какая была.
Затем присваиваем указатель на место Dest. Если не получилось - значит подали неправильный адрес переменной, с самого начала там мусор, и мы не виноваты.
Затем уменьшаем счётчик ссылок у старой строки. Если не получилось - то старая строка была неправильно сформирована, Access Violation, но в пользовательской переменной уже находится правильный указатель на новую строку, и если мы будем обрабатывать исключение, то будем работать с правильной строкой.
И только потом освобождаем память, занятую старой строкой. Возможна ситуация, как в предыдущем пункте.
|