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

  • After Effects Tutorials w/ Mikey

    After Effect

    24 HAZİRAN 2009
  • Phandroid

    Phandroid

    26 Ocak 2009
  • Tube Time

    Tube Time

    14 Mayıs 2013