Implementing a Singleton in C++ can often lead to issues, particularly with multithreading and resource management. However, you can implement it safely using modern C++ techniques. Below is an example of a thread-safe Singleton pattern using static local variables in combination with the Meyers' Singleton approach.
#include
#include
class Singleton {
public:
// Deleted copy constructor and assignment operator
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
// Static method to access the instance
static Singleton& getInstance() {
static Singleton instance; // Guaranteed to be destroyed
return instance; // Instantiated on first use
}
void someBusinessLogic() {
// Some business logic here
}
private:
Singleton() {} // Constructor is private
};
int main() {
Singleton& instance = Singleton::getInstance();
instance.someBusinessLogic();
return 0;
}
How do I avoid rehashing overhead with std::set in multithreaded code?
How do I find elements with custom comparators with std::set for embedded targets?
How do I erase elements while iterating with std::set for embedded targets?
How do I provide stable iteration order with std::unordered_map for large datasets?
How do I reserve capacity ahead of time with std::unordered_map for large datasets?
How do I erase elements while iterating with std::unordered_map in multithreaded code?
How do I provide stable iteration order with std::map for embedded targets?
How do I provide stable iteration order with std::map in multithreaded code?
How do I avoid rehashing overhead with std::map in performance-sensitive code?
How do I merge two containers efficiently with std::map for embedded targets?