Skip to content

Instantly share code, notes, and snippets.

@DJmong
Created September 1, 2023 04:22
Show Gist options
  • Select an option

  • Save DJmong/6b8694dab100e85963cdd5178e0c9b78 to your computer and use it in GitHub Desktop.

Select an option

Save DJmong/6b8694dab100e85963cdd5178e0c9b78 to your computer and use it in GitHub Desktop.
crtp_singleton
#include <iostream>
template <typename T>
class Singleton
{
protected:
Singleton() {}
public:
static T& getInstance()
{
static T instance;
return instance;
}
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
};
class CarManager : public Singleton<CarManager>
{
public:
void doSomething() { std::cout << "Car manager : " << this << "\n"; }
};
class HumanManager : public Singleton<HumanManager>
{
public:
void doSomething() { std::cout << "Human manager : " << this << "\n"; }
};
int main(int argc, char** argv)
{
CarManager& a = CarManager::getInstance();
CarManager& b = CarManager::getInstance();
HumanManager& c = HumanManager::getInstance();
HumanManager& d = HumanManager::getInstance();
a.doSomething();
b.doSomething();
c.doSomething();
d.doSomething();
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment