Pergunta

Eu pensei que eu ouvi que D classes de ter duas palavras (2 void*) de sobrecarga em vez de uma palavra exigido pelo C++.Eu também ouvi que a vtable layout é incompatível com o C++.Não me lembro?Em caso afirmativo, qual é a justificativa para essas decisões?

Foi útil?

Solução

Algumas coisas:

  1. Em C++, uma classe que não tem funções virtuais terão zero sobrecarga.
  2. Em D, uma classe herda sempre de funções virtuais a partir de Object, de forma que ele sempre tem que __vptr a sobrecarga, mas também tem um __monitor, que C++ classe de objetos não têm.
  3. Em C++ e D, haverá adicionais vptr para cada interface que a classe implementa.

O esquema vtable é incompatível com o C++, porque D inclui um ponteiro para um TypeInfo instância, que tem tempo de execução do tipo de informações sobre a classe.C++, obviamente, não tem que, portanto, é incompatível.

Outras dicas

O ponteiro extra é para um objeto de monitor para classes sincronizadas (aparentemente já have sido falar sobre a remoção para classes não sincronizadas, mas isso não aconteceu).O layout é documentado no ABI seção da especificação.

Não tenho certeza de como o layout vtable difere de como os compiladores C ++ fazem isso.Alguém provavelmente pode responder isso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top