POD e não POD…

Já ouviu falar da sigla POJO? Ela significa, para os aficcionados do java, Plain Old Java Object. Em C++ existe um termo parecido: POD (Plain Old Data). Refere-se à maneira como uma estrtura é armazenada na memória. Se criarmos uma classe assim:

struct vec3
{
  void init(float x=0.0f, float y=0.0f, float z=0.0f) 
  { x_ = x; y_ = y; z_ = z; }

  float x_, y_, z_;
};

É garantido que o tamanho da estrtutura seja de 12 bytes (3 * sizeof(float)) e que os membros x_, y_ e z_ apareçam nessa sequência. Mesmo que a classe tenha uma função membro! Mas, existem regras:

  1. A classe não pode ter construtores ou um destrutor;
  2. A classe não pode ter funções virtuais;
  3. A classe não pode ter um operador de assinalamento;
  4. Os membros de dados têm que ser PODs também (tipos primirivos ou estruturas POD);
  5. Não podem haver membros de dados estáticos.

Bem… Podemos usar uma classe como POD se não atende essas regras? Poder, podemos, mas não haverá mais garantia de que a estrutura seja um POD, de acordo com a especificação de C++. O GCC (g++) parece não ligar muito para essas regras, por exemplo (mas, não observar as duas últimas pode bagunçar o coreto!)…

E herança, pode? Pode! Mas desde que seja herança simples e a classe base não seja virtual… Neste caso, os membros da classe derivada serão adicionados ao final da classe base.

Anúncios

Deixe um comentário

Faça o login usando um destes métodos para comentar:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s