Поделиться через


Класс CStringData

Этот класс представляет данные строкового объекта.

Синтаксис

struct CStringData

Участники

Методы

Имя Описание
AddRef Увеличивает число ссылок объекта строковых данных.
data Извлекает символьные данные строкового объекта.
IsLocked Определяет, заблокирован ли буфер связанного строкового объекта.
IsShared Определяет, является ли буфер связанного строкового объекта общим.
Заблокировать Блокирует буфер связанного объекта строки.
Выпуск Освобождает указанный строковый объект.
Отпирать Разблокирует буфер связанного объекта строки.

Элементы данных

Имя Описание
nAllocLength Длина выделенных данных в XCHARs (не включая прекращение null)
nDataLength Длина используемых в настоящее время данных в XCHARs (не включая прекращение null)
nRefs Текущее число ссылок объекта.
pStringMgr Указатель на диспетчер строк данного объекта строки.

Замечания

Этот класс следует использовать только разработчиками, реализующим пользовательские диспетчеры строк. Дополнительные сведения о пользовательских диспетчерах строк см. в разделе "Управление памятью" и CStringT

Этот класс инкапсулирует различные типы сведений и данных, связанных с более высоким строковым объектом, например CStringT, CSimpleStringT или объектами CFixedStringT. Каждый более высокий строковый объект содержит указатель на связанный CStringData объект, что позволяет нескольким строковым объектам указывать на один и тот же строковый объект данных. Эта связь представлена счетчиком ссылок (nRefs) CStringData объекта.

Примечание.

В некоторых случаях строковый тип (например CFixedString) не будет совместно использовать строковый объект данных с несколькими более высокими строковыми объектами. Дополнительные сведения об этом см. в разделе "Управление памятью" и CStringT.

Эти данные состоят из:

  • Диспетчер памяти (типа IAtlStringMgr) строки.

  • Текущая длина ( nDataLength) строки.

  • Выделенная длина ( nAllocLength) строки. По соображениям производительности это может отличаться от текущей длины строки.

  • Текущее число ссылок ( nRefs) CStringData объекта. Это значение используется при определении количества строковых объектов, совместно использующих один и тот же CStringData объект.

  • Фактический буфер символов ( данные) строки.

    Примечание.

    Фактический буфер символов объекта строки выделяется диспетчером строк и добавляется к объекту CStringData .

Требования

Заголовок: atlsimpstr.h

CStringData::AddRef

Увеличивает число ссылок строкового объекта.

void AddRef() throw();

Замечания

Увеличивает число ссылок строкового объекта.

Примечание.

Не вызывайте этот метод в строке с отрицательным числом ссылок, так как отрицательное число указывает, что буфер строки заблокирован.

CStringData::d ata

Возвращает указатель на символьный буфер строкового объекта.

void* data() throw();

Возвращаемое значение

Указатель на символьный буфер строкового объекта.

Замечания

Вызовите эту функцию, чтобы вернуть текущий буфер символов связанного строкового объекта.

Примечание.

Этот буфер не выделяется CStringData объектом, но по мере необходимости диспетчером строк. При выделении буфер добавляется к объекту строковых данных.

CStringData::IsLocked

Определяет, заблокирован ли буфер символов.

bool IsLocked() const throw();

Возвращаемое значение

Возвращает значение TRUE, если буфер заблокирован; в противном случае ЗНАЧЕНИЕ FALSE.

Замечания

Вызовите эту функцию, чтобы определить, заблокирован ли буфер символов строкового объекта.

CStringData::IsShared

Определяет, является ли общий буфер символов.

bool IsShared() const throw();

Возвращаемое значение

Возвращает значение TRUE, если буфер общий; в противном случае ЗНАЧЕНИЕ FALSE.

Замечания

Вызовите эту функцию, чтобы определить, является ли буфер символов объекта строковых данных общим для нескольких строковых объектов.

CStringData::Lock

Блокирует буфер символов связанного объекта строки.

void Lock() throw();

Замечания

Вызовите эту функцию, чтобы заблокировать буфер символов объекта строковых данных. Блокировка и разблокировка используются, если для разработчика требуется прямой доступ к буферу символов. Хороший пример блокировки демонстрируется методами CSimpleStringTLockBuffer и UnlockBuffer.

Примечание.

Буфер символов можно заблокировать только в том случае, если буфер не является общим для более высоких строковых объектов.

CStringData::nAllocLength

Длина выделенного буфера символов.

int nAllocLength;

Замечания

Сохраняет длину выделенного буфера данных в XCHARs (не включая прекращение null).

CStringData::nDataLength

Текущая длина объекта строки.

int nDataLength;

Замечания

Сохраняет длину используемых в настоящее время данных ( XCHARне включая прекращение null).

CStringData::nRefs

Количество ссылок объекта строковых данных.

long nRefs;

Замечания

Сохраняет количество ссылок объекта строковых данных. Это число указывает количество объектов строк, связанных с объектом данных строки. Отрицательное значение указывает, что объект строковых данных в настоящее время заблокирован.

CStringData::p StringMgr

Диспетчер памяти связанного объекта строки.

IAtlStringMgr* pStringMgr;

Замечания

Сохраняет диспетчер памяти для связанного объекта строки. Дополнительные сведения о диспетчерах и строках памяти см. в разделе "Управление памятью" и CStringT.

CStringData::Release

Уменьшает число ссылок объекта строковых данных.

void Release() throw();

Замечания

Вызовите эту функцию для уменьшения количества ссылок, освобождая CStringData структуру, если число ссылок достигает нуля. Обычно это делается при удалении строкового объекта и, следовательно, не требуется ссылаться на объект данных строки.

Например, следующий код вызывает CStringData::Release объект строковых данных, связанный с str1:

{
   CString str1 = _T("Hello world");  // Allocates new CStringData
}
// str1 is deleted when it goes out of scope, so it releases its string data   

CStringData::Unlock

Разблокирует буфер символов связанного объекта строки.

void Unlock() throw();

Замечания

Вызовите эту функцию, чтобы разблокировать буфер символов объекта строковых данных. После разблокировки буфера он доступен для совместного использования и может быть указан в ссылке.

Примечание.

Каждый вызов Lock должен соответствовать соответствующему вызову Unlock.

Блокировка и разблокировка используются, когда разработчик должен убедиться, что строковые данные не будут общими. Хороший пример блокировки демонстрируется методами CSimpleStringTLockBuffer и UnlockBuffer.

См. также

Диаграмма иерархии
Общие классы ATL/MFC