SORU
20 Ocak 2009, Salı


Sanal yıkıcılar ne zaman kullanılır?

En OO teorisi sağlam bir anlayış var ama bana çok kafasını karıştıran tek şey sanal yıkıcılar.

Ve zincirin her nesne için ne kadar yıkıcı olursa olsun her zaman çağrılan düşündüm.

Onları ne zaman ve neden sanal olması gerekiyor mu?

CEVAP
20 Ocak 2009, Salı


Sanal yıkıcılar temel sınıf için bir işaretçi: türetilmiş bir sınıfın örneğini silmek için yararlıdır

class Base 
{
    // some virtual methods
};

class Derived : public Base
{
    ~Derived()
    {
        // Do some important cleanup
    }
}

Burada, Temel yıkıcı sanal ilan etmedim fark edeceksiniz. Şimdi aşağıdaki kod bir göz atalım:

Base *b = new Derived();
// use b
delete b; // Here's the problem!

Temel yıkıcı değil sanal ve b Derived bir nesneye Base* işaret, delete b undefined behaviour vardır. En uygulamaları, çağrı için yıkıcı olacaktır çözülmüş gibi herhangi bir sanal olmayan bir kod, yani yıkıcı bir sınıf olacak denilen ama bir türetilmiş sınıf, elde edilen kaynakların sızıntı.

Özetle, her zaman temel sınıflar' polymorphically manipüle olmaları gerekiyor. virtual yıkıcılar olun

İsterseniz silinmesini engelle örneği üzerinden temel sınıf işaretçisi, sen-ebilmek yapmak temel sınıf destuctor korumalı ve pratik; böyle yaparak, derleyici izin vermiyor diyorsun silmek için bir temel sınıf işaretçisi.

Sanallık ve sanal temel sınıf this article from Herb Sutter yıkıcı hakkında daha fazla bilgi edinebilirsiniz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • GFX Tutorials

    GFX Tutorial

    12 AĞUSTOS 2013
  • InsideBlackBerry

    InsideBlackB

    14 Aralık 2009
  • PlugResearch

    PlugResearch

    22 Mart 2006