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

  • MC JIN'S OLD YouTube CHANNEL

    MC JIN'S OLD

    2 Kasım 2008
  • hydejiaqi

    hydejiaqi

    12 Mart 2008
  • pendrop gaming

    pendrop gami

    4 ŞUBAT 2013