Показать сообщение отдельно
  #23  
Старый 15.03.2013, 09:33
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

А шаги переставлены, что бы возможные ошибки не приводили к краху всей системы.
То есть сначала выделяем память, если не получилось, то EOutOfMemory, но старая строка остаётся какая была.

Затем присваиваем указатель на место Dest. Если не получилось - значит подали неправильный адрес переменной, с самого начала там мусор, и мы не виноваты.

Затем уменьшаем счётчик ссылок у старой строки. Если не получилось - то старая строка была неправильно сформирована, Access Violation, но в пользовательской переменной уже находится правильный указатель на новую строку, и если мы будем обрабатывать исключение, то будем работать с правильной строкой.

И только потом освобождаем память, занятую старой строкой. Возможна ситуация, как в предыдущем пункте.
Ответить с цитированием