Alternative approach is: avoid non-member functions. Strictly speaking, you never need one (except application entry point, "main" :-). Each and every non-member function can be formally replaced with static function of a class. As to static functions, OOP usually reduces them and helps to keep them to minimum. At the same time, if a function does not use "this" (access to the instance), is should not be an instance function — make is static.
Also, gluing classes/instances together is not a problem at all. What so special about this? It's an integral part of general programming. Again, it never requires non-members.
Is what you mean a Singleton pattern? Yes, sometimes you need singletons,
http://en.wikipedia.org/wiki/Singleton_pattern[
^].
Start forgetting non-members. Get to OOP!
—SA