Указатели на объекты объявленного типа хороши как на C, так и на C ++. Это основано на том факте, что указатели являются объектами фиксированного размера (скажем, всегда 32-разрядные целые числа на 32-разрядной платформе), поэтому вам не требуется знать полный размер указанного типа.
На самом деле вам даже не нужно полное объявление типа для объявления указателя. Предварительного объявления будет достаточно:
class A; // forward declared type
struct B
{
A* pa; //< pointer to A - perfectly legal
};
Конечно, вам нужна полная декларация в области, в которой вы фактически получаете доступ к членам:
#include <A.hpp> // bring in full declaration of class A
...
B b;
b.pa = &a; // address of some instance of A
...
b.pa->func(); // invoke A's member function - this needs full declaration
Для FIFO смотрите std::queue
. И std::list
, std::deque
, и std::vector
могут быть использованы для этой цели, но также предоставляют другие возможности.