This is one of the most commonly used patterns.
Make the class of the single instance object responsible for creation, initialization, access, and enforcement. Declare the instance as a private static data member. Provide a public static accessor function that encapsulates all initialization code, and provides access to the instance.
The client calls the accessor function whenever a reference to the single instance is required.