Singleton done right in C++ -- Andreas Fertig

andreasfertig.pngIn today's post, I like to touch on a controversial topic: singletons. While I think it is best to have a codebase without singletons, the real-world shows me that singletons are often part of codebases.

Singleton done right in C++

by Andreas Fertig

From the article:

Let's use a usage pattern for a singleton that I see frequently, a system-wide logger. A simple implementation can look like the following code:

class Logger {
  Logger() = default;

public:
  static Logger& Instance()
  {
    static Logger theOneAndOnlyLogger{};

    return theOneAndOnlyLogger;
  }

  void Info(std::string_view msg) { std::print("Info: {}", msg); }
  void Error(std::string_view msg) { std::print("Error: {}", msg); }
};

The key parts for a singleton in C++ are that the constructor is private and an access function that is static. With that, you ensure that a singleton object, here Logger can only be constructed by calling Instance, essentially limiting the number of Logger objects to a single one.

You're using such a Logger like this:

Logger::Instance().Info("A test");



Add a Comment

Comments are closed.

Comments (0)

There are currently no comments on this entry.