novtable

Specyficzne dla firmy Microsoft

Jest to atrybut rozszerzony __declspec.

Ta forma __declspec może być stosowana do wszelkich deklaracji klas, ale powinien być stosowany tylko do czystych klas interfejsów, to znaczy klas, które nigdy nie będą posiadały własnych wystąpień.__declspec powstrzymuje kompilator od generowania kodu inicjowania vfptr w konstruktorze(ach) i destruktorze klasy.W wielu przypadkach spowoduje to usunięcie tylko odwołań do vtable, które są skojarzone z klasą i w efekcie konsolidator usunie je.Użycie tej formy __declspec może spowodować znaczne zmniejszenie rozmiaru kodu.

Jeśli użytkownik spróbuje utworzyć wystąpienie klasy oznaczone novtable i następnie uzyskać dostępu do członka klasy, otrzyma błąd naruszenia zasad dostępu (AV).

Przykład

// novtable.cpp
#include <stdio.h>

struct __declspec(novtable) X {
   virtual void mf();
};

struct Y : public X {
   void mf() {
      printf_s("In Y\n");
   }
};

int main() {
   // X *pX = new X();
   // pX->mf();   // Causes a runtime access violation.

   Y *pY = new Y();
   pY->mf();
}
  

Zobacz też

Informacje

__declspec

Słowa kluczowe języka C++