Udostępnij za pośrednictwem


novtable

Programu Microsoft

Jest to __declspec rozszerzonych atrybutów.

Ta forma __declspec mogą być stosowane do każdej deklaracji klasy, ale powinien być stosowany tylko do klas czystego interfejsu, to znaczy klas, które nigdy nie będzie można utworzyć wystąpienia na własny.__declspec Zatrzymuje kompilator od generowania kodu zainicjować vfptr w constructor(s) i destruktora klasy.W wielu przypadkach to usuwa tylko odwołania do Tablica metod wirtualnych, które są skojarzone z klasą i w ten sposób, program łączący spowoduje usunięcie go.Za pomocą tego formularza z __declspec może spowodować znaczne zmniejszenie rozmiaru kodu.

Podczas próby utworzenia wystąpienia klasy, oznaczone novtable i następnie uzyskać dostęp do członka klasy, otrzymasz naruszenie 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łów kluczowych języka C++