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

  • Joseph Hayhoe

    Joseph Hayho

    20 Mayıs 2010
  • MagicofRahat

    MagicofRahat

    13 Temmuz 2007
  • Santozz Yazz

    Santozz Yazz

    23 Mart 2014