CStringData Sınıfı
Bu sınıf bir dize nesnesinin verilerini temsil eder.
Sözdizimi
struct CStringData
Üyeler
Yöntemler
Veri Akışı Adı | Açıklama |
---|---|
AddRef | Dize veri nesnesinin başvuru sayısını artırır. |
data | Dize nesnesinin karakter verilerini alır. |
IsLocked | İlişkili dize nesnesinin arabelleğinin kilitli olup olmadığını belirler. |
IsShared | İlişkili dize nesnesinin arabelleğinin şu anda paylaşılıp paylaşılmadığını belirler. |
Kilitle | İlişkili dize nesnesinin arabelleği kilitler. |
Sürüm | Belirtilen dize nesnesini serbest bırakır. |
Kilidi açmak | İlişkili dize nesnesinin arabelleğinin kilidini açar. |
Veri Üyeleri
Veri Akışı Adı | Açıklama |
---|---|
nAllocLength | Ayrılmış verilerin XCHAR uzunluğu (null sonlandırma dahil değildir) |
nDataLength | Şu anda kullanılan verilerin XCHAR uzunluğu (null sonlandırma dahil değildir) |
nRefs | Nesnenin geçerli başvuru sayısı. |
pStringMgr | Bu dize nesnesinin dize yöneticisinin işaretçisi. |
Açıklamalar
Bu sınıf yalnızca özel dize yöneticileri uygulayan geliştiriciler tarafından kullanılmalıdır. Özel dize yöneticileri hakkında daha fazla bilgi için bkz . Bellek Yönetimi ve CStringT
Bu sınıf CStringT, CSimpleStringT veya CFixedStringT nesneleri gibi daha yüksek bir dize nesnesiyle ilişkili çeşitli bilgi ve veri türlerini kapsüller. Her yüksek dize nesnesi, ilişkili CStringData
nesnesine yönelik bir işaretçi içerir ve birden çok dize nesnesinin aynı dize veri nesnesine işaret etmelerini sağlar. Bu ilişki nesnenin başvuru sayısıyla (nRefs
) CStringData
temsil edilir.
Not
Bazı durumlarda, bir dize türü (örneğin CFixedString
), birden fazla yüksek dize nesnesine sahip bir dize veri nesnesini paylaşmaz. Bu konuda daha fazla bilgi için bkz . Bellek Yönetimi ve CStringT.
Bu veriler şunlardan oluşur:
Dizenin bellek yöneticisi (IAtlStringMgr türünde).
Dizenin geçerli uzunluğu ( nDataLength).
Dizenin ayrılan uzunluğu ( nAllocLength). Performans nedenleriyle, bu geçerli dize uzunluğundan farklı olabilir
Nesnenin geçerli başvuru sayısı ( nRefs).
CStringData
Bu değer, aynıCStringData
nesneyi kaç dize nesnesinin paylaştığını belirlemek için kullanılır.Dizenin gerçek karakter arabelleği ( veri).
Not
Dize nesnesinin gerçek karakter arabelleği dize yöneticisi tarafından ayrılır ve nesneye
CStringData
eklenir.
Gereksinimler
Üst bilgi: atlsimpstr.h
CStringData::AddRef
Dize nesnesinin başvuru sayısını artırır.
void AddRef() throw();
Açıklamalar
Dize nesnesinin başvuru sayısını artırır.
Not
Negatif bir sayı dize arabelleğinin kilitli olduğunu gösterdiğinden, negatif başvuru sayısı olan bir dizede bu yöntemi çağırmayın.
CStringData::d ata
Dize nesnesinin karakter arabelleğine bir işaretçi döndürür.
void* data() throw();
Dönüş Değeri
Dize nesnesinin karakter arabelleğine bir işaretçi.
Açıklamalar
İlişkili dize nesnesinin geçerli karakter arabelleği döndürmek için bu işlevi çağırın.
Not
Bu arabellek nesne tarafından CStringData
değil, gerektiğinde dize yöneticisi tarafından ayrılır. Ayrıldığında, arabellek dize veri nesnesine eklenir.
CStringData::IsLocked
Karakter arabelleğinin kilitli olup olmadığını belirler.
bool IsLocked() const throw();
Dönüş Değeri
Arabellek kilitliyse TRUE döndürür; aksi takdirde YANLIŞ.
Açıklamalar
Bir dize nesnesinin karakter arabelleğinin şu anda kilitli olup olmadığını belirlemek için bu işlevi çağırın.
CStringData::IsShared
Karakter arabelleğinin paylaşılıp paylaşılmadığını belirler.
bool IsShared() const throw();
Dönüş Değeri
Arabellek paylaşılıyorsa TRUE döndürür; aksi takdirde YANLIŞ.
Açıklamalar
Bir dize veri nesnesinin karakter arabelleğinin şu anda birden çok dize nesnesi arasında paylaşılıp paylaşılmadığını belirlemek için bu işlevi çağırın.
CStringData::Lock
İlişkili dize nesnesinin karakter arabelleği kilitler.
void Lock() throw();
Açıklamalar
Dize veri nesnesinin karakter arabelleği kilitlemek için bu işlevi çağırın. Karakter arabelleğine doğrudan erişim geliştirici tarafından gerekli olduğunda kilitleme ve kilidi açma kullanılır. LockBuffer ve UnlockBuffer yöntemleri tarafından iyi bir kilitleme örneği gösterilmiştirCSimpleStringT
.
Not
Karakter arabelleği yalnızca arabellek daha yüksek dize nesneleri arasında paylaşılmazsa kilitlenebilir.
CStringData::nAllocLength
Ayrılan karakter arabelleğinin uzunluğu.
int nAllocLength;
Açıklamalar
Ayrılmış veri arabelleğinin uzunluğunu s içinde XCHAR
depolar (null sonlandırma dahil değildir).
CStringData::nDataLength
Dize nesnesinin geçerli uzunluğu.
int nDataLength;
Açıklamalar
Şu anda kullanılan verilerin uzunluğunu (null sonlandırma dahil değil) içinde XCHAR
depolar.
CStringData::nRefs
Dize veri nesnesinin başvuru sayısı.
long nRefs;
Açıklamalar
Dize veri nesnesinin başvuru sayısını depolar. Bu sayı, dize veri nesnesiyle ilişkili daha yüksek dize nesnelerinin sayısını gösterir. Negatif değer, dize veri nesnesinin şu anda kilitli olduğunu gösterir.
CStringData::p StringMgr
İlişkili dize nesnesinin bellek yöneticisi.
IAtlStringMgr* pStringMgr;
Açıklamalar
İlişkili dize nesnesi için bellek yöneticisini depolar. Bellek yöneticileri ve dizeleri hakkında daha fazla bilgi için bkz . Bellek Yönetimi ve CStringT.
CStringData::Release
Dize veri nesnesinin başvuru sayısını azaltma.
void Release() throw();
Açıklamalar
Başvuru sayısını azaltması için bu işlevi çağırın ve başvuru sayısı sıfıra ulaştığında yapıyı serbest CStringData
bırakın. Bu genellikle bir dize nesnesi silindiğinde yapılır ve bu nedenle artık dize veri nesnesine başvurması gerekmez.
Örneğin, aşağıdaki kod ile str1
ilişkilendirilmiş dize veri nesnesi için çağrı CStringData::Release
yapar:
{
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
İlişkili dize nesnesinin karakter arabelleğinin kilidini açar.
void Unlock() throw();
Açıklamalar
Dize veri nesnesinin karakter arabelleğinin kilidini açmak için bu işlevi çağırın. Arabelleğin kilidi açıldığında paylaşılabilir ve başvuru sayılabilir.
Not
için Lock
yapılan her çağrı, öğesine karşılık gelen bir çağrıyla Unlock
eşleşmelidir.
Geliştiricinin dize verilerinin paylaşılmadığından emin olması gerektiğinde kilitleme ve kilidini açma kullanılır. LockBuffer ve UnlockBuffer yöntemleri tarafından iyi bir kilitleme örneği gösterilmiştirCSimpleStringT
.