Aracılığıyla paylaş


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 XCHARuzunluğu (null sonlandırma dahil değildir)
nDataLength Şu anda kullanılan verilerin XCHARuzunluğ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 XCHARdepolar (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 XCHARdepolar.

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 str1iliş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 Unlockeş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.

Ayrıca bkz.

Hiyerarşi Grafiği
ATL/MFC Paylaşılan Sınıfları