Maybe you confuse something: You have to use pointers if types are (directly or indirectly) recursive, something like that doesn't work:
class A { A a; }
};
class A { B b; };
class B { A a; };
Often, pointers also help you to reduce dependencies, since the type needn't be complete at declaration. The climax results in the Pimpl Idiom.
In many cases, you can use smart pointers (e.g. std::unique_ptr) to benefit of the advantages of automatic memory management.