base/include/base/singleton/singleton.hpp¶
Thread-safe singleton with explicit initialization. More...
Namespaces¶
| Name |
|---|
| cf |
Classes¶
| Name | |
|---|---|
| class | cf::Singleton Thread-safe singleton with explicit initialization. |
Detailed Description¶
Thread-safe singleton with explicit initialization.
Author: N/A
Version: N/A
Since: N/A
Date: N/A
Provides a singleton implementation that requires explicit initialization via init() before accessing the instance. Uses std::call_once for thread-safe initialization.
Source code¶
#pragma once
#include <memory>
#include <mutex>
#include <stdexcept>
namespace cf {
template <typename T> class Singleton {
public:
template <typename... Args> static T& init(Args&&... args) {
std::call_once(flag_, [&] { instance_.reset(new T(std::forward<Args>(args)...)); });
return *instance_;
}
static T& instance() {
if (!instance_) {
throw std::logic_error("Singleton not initialized. Call init() first.");
}
return *instance_;
}
static void reset() { instance_.reset(); }
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
protected:
Singleton() = default;
virtual ~Singleton() = default;
private:
inline static std::unique_ptr<T> instance_ = nullptr;
inline static std::once_flag flag_;
};
} // namespace cf
Updated on 2026-03-09 at 10:14:01 +0000