578________ _____________________Часть IV. Новые возможности C++

{

// Сообщим пользователю о наших затруднениях. cout « "Sorry, out of memory!" « endl;

}

Когда вызов конструктора для longString потерпит неудачу по причине недостаточного количества памяти, пользователю будет выдано сообщение, а мы сможем начать отладку.

Общие замечания о реализации класса строк ANSI в Borland C++

Если вы просматривали заголовочный файл cstring.h, то, возможно, обратили внимание на то, что некоторые из декларированных в нем средств были опущены в нашем изложении. Это было сделано намеренно. Так как эта глава озаглавлена "Понятие строк в ANSI С и ANSI C++", то особое внимание здесь уделено функциональной полноте, определяемой стандартом ANSI C++. Строковый класс ANSI C++, согласно стандарту, должен быть определен в заголовке string.h, включающем заголовок cstring.h (функции строковой библиотеки С). Borland C++ 5 пока еще не содержит стандартные заголовочные файлы ANSI C++; возможно, это дело будущего.

Реализация строкового класса, предлагаемая Borland C++, по ряду статей расширяет функциональные возможности, предусмотренные стандартом ANSI. Разработчики проектов, предназначенных для различных операционных систем, таких как Macintosh, DOS/Windows и UNIX, стараются по возможности избегать использования расширений библиотек ANSI, ориентированных только на одну из платформ. Если вас не беспокоит вопрос переносимости ваших приложений, то прочтите следующую ниже' краткую информацию о расширениях, предлагаемых фирмой Borland.

Возможно, вы обратили внимание на следующее утверждение из Справочника по библиотеке классов Borland: "This class use a technique called copy-on-write" (Этот класс использует прием, называемый копирование, при записи). На практике это означает, что одинаковые строки занимают в действительности одну и ту же область памяти, т. е. на один и тот же фрагмент данных могут ссылаться несколько экземпляров строк До тех пор, пока его содержимое остается неизменным. При необходимости внесения изменений в одну из них автоматически создается новая копия строки, над которой и производятся необходимые действия. Для быстрого обращения к строке используется алгоритм хеширования (hashing). Для всех алгоритмов хеширования возможны коллизии (когда две или более строк ссылаются на один адрес в памяти); для того, чтобы предупредить их возникновение, используйте функцию-член set_paranoid_ check, которая обеспечит корректность ваших данных. Это одна из особенностей реализации библиотеки строкового класса Borland.