I am reading the amazing Game Engine Architecture 3rd edition by Jason Gregory, but I have trouble understanding the singleton part, more particularly the part dealing with subsystem start/shutdown...
He presents a way to start and shutdown with a Singleton (Manager) not by implementing any constructor or destructor but using non-static methods startUp() and shutDown(). And he declares the instance manager as global before the main entry point. What I don't understand is: is the manager are really a singleton? Because it's not static and the constructor and destructor are not private...
Here is the implementation he gave for the renderManager:
class RenderManager { public: RenderManager() { // do nothing } ~RenderManager() { // do nothing } void startUp() { // start up the manager... } void shutDown() { // shut down the manager... } class PhysicsManager{ /* similar... */ }; class AnimationManager{ /* similar... */ }; class MemoryManager{ /* similar... */ }; class FileSystemManager { /* similar... */ }; // ... RenderManager PhysicsManager AnimationManager TextureManager VideoManager MemoryManager FileSystemManager // ... gRenderManager; gPhysicsManager; gAnimationManager; gTextureManager; gVideoManager; gMemoryManager; gFileSystemManager; int main(int argc, const char* argv) { // Start up engine systems in the correct order. gMemoryManager.startUp(); gFileSystemManager.startUp(); gVideoManager.startUp(); gTextureManager.startUp(); gRenderManager.startUp(); gAnimationManager.startUp(); gPhysicsManager.startUp(); // ... // Run the game. gSimulationManager.run(); // Shut everything down, in reverse order. // ... gPhysicsManager.shutDown(); gAnimationManager.shutDown(); gRenderManager.shutDown(); gFileSystemManager.shutDown(); gMemoryManager.shutDown(); return 0; } My question is: does the startUp method call any static method to initialize/grab the an static instance of the manager?
RenderManager\$\endgroup\$