SORU
7 Kasım 2008, Cuma


Neden C soyut bir sınıf için sanal bir yıkıcı ilan etmeli miyim ?

C temel sınıflar için sanal yıkıcılar bildirmek için iyi bir uygulamadır biliyorum , ama her zaman bile arabirimleri olarak işlev soyut sınıflar için virtual yıkıcılar bildirmek için önemli mi? Neden bazı nedenler ve örnekler veriniz.

CEVAP
7 Kasım 2008, Cuma


Bir arabirim için daha da önemli. Sınıfınızın herhangi bir kullanıcı muhtemelen arayüzü için bir işaretçi, beton uygulaması için bir işaretçi tutar. Ne zaman onlar gelmek silin, eğer yıkıcı olmayan sanal, onlar çağrı arabirimi yıkıcı (veya derleyici tarafından sağlanan varsayılan, yapmasaydın belirtin), türetilmiş sınıfın yıkıcı. Anlık bellek sızıntısı.

Örneğin

class Interface
{
   virtual void doSomething(void) = 0;
};

class Derived : public Interface
{
   Derived(void);
   ~Derived(void) 
   {
      // Do some important cleanup...
   }
};

void myFunc(void)
{
   Interface* p = new Derived();
   // The behaviour of the next line is undefined. It probably 
   // calls Interface::~Interface, not Derived::~Derived
   delete p; 
}

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Boiler Room

    Boiler Room

    10 Mayıs 2012
  • Jeb Corliss

    Jeb Corliss

    17 Kasım 2006
  • TSE

    TSE

    12 Kasım 2012