Aracılığıyla paylaş


Özel durumlar: Özel durumlar nesneleri boşaltma

Bu makalede, ihtiyaç ve bir özel durum oluþtuðunda nesneleri boşaltma yöntemi açıklanmaktadır.Konular:

  • Yerel özel durum işleme

  • Nesneleri yok edip sonra özel durumlar yaratmak

Özel durumlar veya uygulama kesme normal program akışınızı framework tarafından oluşturuldu.Bu nedenle, bir özel durum göz önünde bulundurarak, düzgün bunları atma böylece nesneler izlemenize çok önemlidir.

Bunu yapmak için iki birincil yöntem vardır.

  • Yerel olarak kullanarak özel durumlarý iþlemek deneyin ve catch anahtar sözcükler, sonra tüm nesnelerin bir ifade yok.

  • Herhangi bir nesneyi yok catch daha fazla işleme bloğu dışında bir özel durum üretiliyor önce blok.

Bu iki yaklaşımdan çözümleri aşağıdaki sorunlu örnek olarak aşağıda gösterilmiştir:

void SomeFunc()        // Problematic code
{
   CPerson* myPerson = new CPerson;

   // Do something that might throw an exception.
   myPerson->SomeFunc();

   // Now destroy the object before exiting.
   // If SomeFunc above throws an exception this code will
   // not be reached and myPerson will not be deleted.
   delete myPerson;
}

Yukarıda yazılı olarak myPerson tarafından bir özel durum oluşursa silinmeyecek SomeFunc.Normal işlev Çık ve silen kod atlayarak doğrudan sonraki dış istisna işleyicisine, yürütme atlar.İşaretçiyi nesnenin kapsamı dışında özel işlev bırakır ve program çalışmadığı sürece, hiçbir zaman nesnenin kapladığı bellek kurtarılacak gider.Bellek sızıntısı olmasıdır; Bellek Tanılama'yı kullanarak algılanması.

Yerel özel durum işleme

Try/catch kip bellek sızıntıları kaçınma ve özel durumlar ortaya çıktığında nesneleri yok olma savunma amaçlı programlama yöntemi sağlar.Örneğin, bu makalenin önceki bölümlerinde gösterilen örnek aşağıdaki gibi yeniden:

void SomeFunc()
{
   CPerson* myPerson = new CPerson;

   try
   {
      // Do something that might throw an exception.
      myPerson->SomeFunc();
   }
   catch( CException* e )
   {
      // Handle the exception locally
      e->Delete();
   }

   // Now destroy the object before exiting.
   delete myPerson;
}

Bu yeni örnek özel durumu yakalamak ve yerel olarak işlemek için bir özel durum işleyici ayarlar.Normal işlev çıkar ve nesnesini yok eder.Bu örnek önemli yanlarından özel durumu yakalamak için bir içerik ile kurulmuş olan try/catch engeller.Yerel özel çerçeve, bir özel durum ve normalde çıkıp bir nesneyi yıkmak için şans sahip olmaz işlev hiçbir zaman anlarsınız.

Nesneleri yok edip sonra özel durumlar yaratmak

Özel durumlarý iþlemek için başka bir sonraki dış özel durum işleme içeriğine göre geçmesine yoludur.İçinde sizin catch blok, bilgisayarınızda yerel olarak ayrılan nesnelerin bazı temizleme yapın ve ardından sonradan işlenmek üzere istisna.

Throwing işlevi olabilir ya da Yığın nesnelerin ayırması gerekmeyebilir.İşlevin normal durumda dönmeden önce her zaman öbek nesne kaldırır, sonra işlevi de yığın nesnesi özel durum üretiliyor önce ayırması.İşlev genellikle nesneyi normal durumda dönmeden önce ayırması değil, diğer taraftan, sonra büyük/küçük harf harf temelinde yığın nesnesi ayırmanın olup olmadığını karar vermelisiniz.

Nasıl yerel nesneleri ayrılan aşağıdaki örnekte gösterildiği Temizlenen:

void SomeFunc()
{
   CPerson* myPerson = new CPerson;

   try
   {
      // Do something that might throw an exception.
      myPerson->SomeFunc();
   }
   catch( CException* e )
   {
      e->ReportError();
       // Destroy the object before passing exception on.
      delete myPerson;
      // Throw the exception to the next handler.
      throw;
   }

   // On normal exits, destroy the object.
   delete myPerson;
}

Özel durum mekanizması otomatik olarak çerçeve nesneleri kaldırır; Çerçeve nesnesinin yıkıcı olarak da bilinir.

İstisnalar atabilirsiniz işlevleri aradığınızda kullanabilirsiniz try/catch özel durumları yakalamak ve oluşturduğunuz tüm nesneleri yok şansına sahip olmasını engeller.Özellikle, birçok mfc işlevleri istisnalar atabilirsiniz unutmayın.

Daha fazla bilgi için bkz: durumlar: çalýþýrçalýþma ve silme özel durumları.

Ayrıca bkz.

Kavramlar

Özel durum işleme mfc