В библиотечном коде абсолютно недопустимо вызывать exit
или abort
при любых обстоятельствах, кроме случаев, когда вызывающая сторона разорвала контакт с документированным интерфейсом вашей библиотеки.Если вы пишете библиотечный код, вы должны корректно обрабатывать любые ошибки выделения, освобождая любую память или другие ресурсы, полученные в результате предпринятой операции, и возвращая вызывающей стороне состояние ошибки.Вызывающая программа может затем решить exit
, abort
, отклонить любую команду, которую пользователь дал, которая требовала избыточной памяти, освободить некоторые ненужные данные и повторить попытку, или что-либо еще, что имеет смысл для приложения.
Во всехВ случаях, когда ваше приложение хранит данные, которые не были синхронизированы с диском и имеют потенциальную ценность для пользователя, вы должны приложить все усилия, чтобы не выбрасывать эти данные при сбоях выделения.Пользователь почти наверняка будет очень зол .Лучше спроектировать свои приложения так, чтобы функция «save» не требовала каких-либо выделений, но если вы не можете сделать это вообще, вместо этого вы можете захотеть выполнять частые операции автоматического сохранения в временный файл или предоставлятьспособ выгрузки содержимого памяти на диск в форме, которая не является стандартным форматом файла (который может, например, потребовать для записи уродливые библиотеки XML и ZIP, каждая со своими собственными потребностями выделения), а вместо этого - более «сырой дамп», который вы применяетеможет читать и восстанавливаться при следующем запуске.