novtable

Specyficzne dla firmy Microsoft

Jest __declspec to atrybut rozszerzony.

Ta forma __declspec może być stosowana do dowolnej deklaracji klasy, ale powinna być stosowana tylko do czystych klas interfejsów, czyli klas, które nigdy nie zostaną utworzone samodzielnie. Element __declspec zatrzymuje kompilator generowania kodu w celu zainicjowania pliku vfptr w konstruktorach i destruktorze klasy. W wielu przypadkach spowoduje to usunięcie jedynych odwołań do tabeli wirtualnej skojarzonej z klasą, a tym samym konsolidator go usunie. Użycie tej formy może spowodować znaczne zmniejszenie rozmiaru __declspec kodu.

Jeśli spróbujesz utworzyć wystąpienie klasy oznaczonej jako , novtable a następnie uzyskasz dostęp do składowej klasy, otrzymasz naruszenie 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();
}
In Y

END Microsoft Specific

Zobacz też

__declspec
Słowa kluczowe