Visual C++. Описание стандартных классов - CString

ОГЛАВЛЕНИЕ


CString

Объект класса CString используется для хранения текстовой строки переменного размера. Функции и операции данного класса во многом аналогичны операторам языка Basic. Использование операций конкатенации и сравнения строк, а также упрощение операций по работе с памятью, существенно облегчают работу с объектом класса CString по сравнению с обычным массивом символов. Для представления символов в объекте класса CString используется тип TCHAR. Если для программы определен символ _UNICODE, то типу TCHAR соответствует тип wchar_t (16-разрядный символ), в противном случае этому типу соответствует тип char (обычный 8-разрядный символ). При использовании кодировки Unicode объекты класса CString состоят из 16-разрядных символов. При использовании кодировки Windows они состоят из 8-разрядных символов. Если не определен символ _UNICODE, объект класса CString позволяет использовать многобайтные наборы символов (MBCS известные так же, как DBCS). При этом следует помнить, что объект класса CString при проведении строковых операций рассматривает строки MBCS как набор 8-разрядных символов. Поэтому приложение должно само взять на себя задачу подготовки аргументов для данных операций и правильной интерпретации полученных результатов. Объекты класса CString имеют следующие особенности:
  • объект класса CString позволяет увеличивать размер хранимой в нем строки для размещения результата операции слияния строк;
  • объект класса CString следует рассматривать как строку, а не как указатель на нее;
  • объект класса CString самостоятельно преобразуется к типу const char* и LPCTSTR, что позволяет использовать его в качестве аргументов функций, имеющих данный тип;
  • оператор явного преобразования типов позволяет получить доступ к содержимому объекта данного класса как к строке символов, имеющей атрибут только для чтения.
По возможности следует избегать создания динамических объектов класса CString. Это поможет сэкономить память, и упростит доступ к данному объекту. Класс CString позволяет незначительно уменьшить объем используемой оперативной памяти за счет того, что две строки, имеющие одно и то же содержимое, разделяют одну и ту же область памяти. Однако эта копеечная экономия приводит к тому, что в случае непосредственного изменения содержимого буфера, содержащего данную строку (в обход функций библиотеки MFC) изменения будут внесены сразу в обе строки. Класс CString включает в себя две функции, позволяющие защитить данные от подобных изменений: CString::LockBuffer и CString::UnlockBuffer. При вызове функции LockBuffer создается копия данной строки, а ее счетчик обращений устанавливается в -1, что означает передачу данной копии в безраздельное пользование данному объекту класса CString. В этом режиме никакой другой объект класса CString не может получить доступ к данной строке, а данный объект класса не может получить доступ к другой строке. Этот режим гарантирует, что все изменения, внесенные в данный объект, не приведут к порче информации, хранимой в других объектах. После завершения модификации новой строки вызывается функция UnlockBuffer, устанавливающая счетчик обращений в 1. Класс CString не имеет базового класса. Описание данного класса содержится в файле заголовка afx.h.