Класс CStringData
Этот класс представляет данные строкового объекта.
Синтаксис
struct CStringData
Участники
Методы
Имя | Описание |
---|---|
AddRef | Увеличивает число ссылок объекта строковых данных. |
data | Извлекает символьные данные строкового объекта. |
IsLocked | Определяет, заблокирован ли буфер связанного строкового объекта. |
IsShared | Определяет, является ли буфер связанного строкового объекта общим. |
Заблокировать | Блокирует буфер связанного объекта строки. |
Выпуск | Освобождает указанный строковый объект. |
Отпирать | Разблокирует буфер связанного объекта строки. |
Элементы данных
Имя | Описание |
---|---|
nAllocLength | Длина выделенных данных в XCHAR s (не включая прекращение null) |
nDataLength | Длина используемых в настоящее время данных в XCHAR s (не включая прекращение 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();
Замечания
Вызовите эту функцию, чтобы заблокировать буфер символов объекта строковых данных. Блокировка и разблокировка используются, если для разработчика требуется прямой доступ к буферу символов. Хороший пример блокировки демонстрируется методами CSimpleStringT
LockBuffer и UnlockBuffer.
Примечание.
Буфер символов можно заблокировать только в том случае, если буфер не является общим для более высоких строковых объектов.
CStringData::nAllocLength
Длина выделенного буфера символов.
int nAllocLength;
Замечания
Сохраняет длину выделенного буфера данных в XCHAR
s (не включая прекращение 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
.
Блокировка и разблокировка используются, когда разработчик должен убедиться, что строковые данные не будут общими. Хороший пример блокировки демонстрируется методами CSimpleStringT
LockBuffer и UnlockBuffer.