Aracılığıyla paylaş


CFixedStringT: Örneğin, bir özel dizesi Yöneticisi

atl kitaplık uygulayan bir sınıf tarafından kullanılan özel dizesi Yöneticisi örneği CFixedStringTadlı CFixedStringMgr.CFixedStringTtüretilir CStringT ve kendi karakter verilerinin bir parçası olarak ayıran dizeyi uygular CFixedStringT dize ile belirtilen uzunluğundan küçük olduğu sürece kendi nesne t_nChars şablonu parametresinin CFixedStringT.Dizenin uzunluğu sabit arabellek boyutu büyür sürece bu yaklaşım ile dize öbek hiç gerek yoktur.Çünkü CFixedStringT mu değil her zaman kullanmak, string veri ayırmak için bir yığın bunu kullanamazsınız CAtlStringMgr kendi dizesi Yöneticisi olarak.Özel dizesi Yöneticisi kullanır (CFixedStringMgr), uygulama IAtlStringMgr arabirimi.Bu arabirimin ele alınan uygulaması özel dizesi Yöneticisi'nin (Gelişmiş yöntem).

Kurucusu CFixedStringMgr üç parametre alır:

  • pData: gösteren bir işaretçi sabit CStringData kullanılacak yapı.

  • nChars: en fazla karakter sayısı CStringData yapısı tutun.

  • pMgr: gösteren bir işaretçi IAtlStringMgr bir "yedek dizesi Yöneticisi" arabirimi

Kurucu değerlerini depolayan pData ve pMgr , ilgili üye değişkenler olarak (m_pData ve m_pMgr).Ardından, sıfıra, kullanılabilir uzunluğu maksimum boyuta eşit sabit arabellek ve başvuru sayısı atayýn veConsole arabelleği uzunluğunu ayarlar.Arabellek kilitli başvuru sayısı değerini gösterir ve bu örneği kullanmak için CFixedStringMgr dizesi Yöneticisi olarak.

Arabellek kilitli olarak işaretleme engelleyen diğer CStringT arabellek paylaşılan bir başvuru tutan gelen örnekler.Diğer, CStringT örnekleri onu tarafından bulunan arabelleği için olası arabellek paylaşmak için izin CFixedStringT diğer dizelerin arabellek kullanmakta olduğunuz sırada silinecek.

CFixedStringMgr tam bir uygulamasıdır IAtlStringMgr arabirimi.Her yöntemin kullanımı ayrı olarak ele alınmıştır.

CFixedStringMgr::Allocate uygulaması

Uygulaması, CFixedStringMgr::Allocate dize istenen boyutunu sabit arabelleğinin boyutunu küçük veya eşit olup olmadığını görmek için ilk çekleri (depolanan m_pData üyesi).Sabit arabellek yeterince, ise CFixedStringMgr sabit arabellek uzunluğu sıfır olan kilitler.Dize uzunluğu sabit arabellek boyutu büyüme değil sürece CStringT arabelleği yeniden ayırmak gerek kalmaz.

Dize istenen boyutunu sabit arabellekten daha büyük olup olmadığını CFixedStringMgr için yedek dize yöneticisi isteği iletir.Yedek dizesi Yöneticisi yığın arabelleğinden tahsis edilir.Ancak, bu arabellek dönmeden önce CFixedStringMgr arabellek kilitler ve bir işaretçi arabellek dize Yöneticisi işaretçisi değiştirir CFixedStringMgr nesnesi.Bu, girişimlerini yeniden tahsis ettiğinizde veya arabellek tarafından serbest sağlar CStringT içine çağıracak CFixedStringMgr.

CFixedStringMgr::ReAllocate uygulaması

Uygulaması, CFixedStringMgr::ReAllocate 'ın uygulamasına oldukça benzer tahsis edilecek.

Ayrılırken arabellek sabit Arabellek istenen arabellek boyutu sabit arabellekten daha küçük ise, tahsisat gerçekleştirilir.Ancak, ayrılırken arabellek sabit arabellek ise, yedek Yöneticisi ile ayrılmış arabellek olması gerekir.Bu durumda yedek Yöneticisi arabelleği yeniden ayırmak için kullanılır.

Ayrılırken arabellek sabit arabellek yeni arabellek boyutu sabit arabellek sığamayacak kadar geniş ise CFixedStringMgr yedekleme Yöneticisi'ni kullanarak yeni bir arabellek ayırır.Sabit arabelleğin içindekileri sonra yeni arabelleğe kopyalanır.

CFixedStringMgr::Free uygulaması

Uygulaması, CFixedStringMgr::Free olarak aynı düzeni izler tahsis edilecek ve ReAllocate.Yöntem bırakılan arabellek sabit arabellek ise, sıfır uzunluklu kilitli arabelleğe ayarlar.Serbest bırakılan arabellek yedek Yöneticisi ile ayrılmış, CFixedStringMgr onu boşaltmak için backup manager'ı kullanır.

CFixedStringMgr::Clone uygulaması

Uygulaması, CFixedStringMgr::Clone her zaman Yedekleme Yöneticisi'ne bir işaretçi döndürür yerine CFixedStringMgr kendisi.Böyle olmasýnýn nedeni her örneğini CFixedStringMgr yalnızca tek bir örneği ile ilişkili olabilir CStringT.' In diğer örneklerini CStringT Yöneticisi klonlamak çalışıyor almak yedek Yöneticisi yerine.Yedekleme Yöneticisi paylaşılmasını destekler olmasıdır.

CFixedStringMgr::GetNilString uygulaması

Uygulaması, CFixedStringMgr::GetNilString sabit arabellek döndürür.İzleyenler yazışma türünü nedeniyle CFixedStringMgr ve CStringT, belirli bir örneği CStringT hiçbir zaman aynı anda birden fazla arabelleğini kullanır.Bu nedenle, boş bir dize ve gerçek dize arabelleğinde hiçbir zaman aynı anda gereklidir.

Sabit arabellek kullanımda olmadığı yerlerde CFixedStringMgr Sıfır uzunluk ile başlatılmış olan sağlar.Böylece, nil dizesi olarak kullanılacak.Eklenen bir ödül olarak nAllocLength sabit arabellek üyesi her zaman sabit arabellek tam boyutuna ayarlayın.Bunun anlamı CStringT olmadan arama dizesi büyüyebilir IAtlStringMgr::Reallocate, hatta nil dizesi için.

Gereksinimler

Başlık: cstringt.h

Ayrıca bkz.

Kavramlar

CStringT ile bellek yönetimi