静态单例
Static Singleton?
是否可以制作一个通用的单例?我想创建一些我可以继承的东西并获得单例的功能。我在使用带有静态成员的模板时遇到问题。
这不应该行吗?
**
更新
**
感谢您到目前为止的回复。所以现在我的问题是游戏引擎看不到它自己的构造函数。我知道这是私人的,但仍然如此。
辛格尔顿
template <typename T>
class Singleton
{
private:
static std::shared_ptr<T> m_Instance;
public:
static std::shared_ptr<T> Instance();
};
template<typename T>
std::shared_ptr<T> Singleton<T>::m_Instance = nullptr;
template<typename T>
std::shared_ptr<T> Singleton<T>::Instance()
{
if(m_Instance == nullptr)
m_Instance = std::make_shared<T>();
return m_Instance;
}
游戏引擎.h
class GameEngine : public Singleton<GameEngine>
{
private:
GameEngine();
};
我不明白这是如何工作的,因为没有什么可以阻止您创建更多GameEngine
实例。
即使有可能(并且确实)有一种通用的方式来创建单例(可能涉及宏),我也建议不要这样做,因为您真正想要单例的情况很少见。让我改写一下...您实际上真正需要单例的情况很少见。
创建单例的最佳方法如下:
class GameEngine
{
public:
static GameEngine& instance() { static GameEngine e; return e; }
private:
GameEngine() {}
GameEngine(const GameEngine&) = delete;
};
e 变量将在第一次调用实例时(线程安全)初始化,并在有序进程退出时销毁。 私有/已删除的构造函数阻止创建第二个实例。
相关文章:
- 函数内具有静态变量的单例类(迈耶实现)
- 具有局部静态变量的单例构造函数
- 使用静态和避免单例模式声明全局变量
- 构造函数在不同线程中的静态单例类上调用两次
- 为什么在C 中创建单例类创建期间静态函数参考静态变量
- 为什么单例在这里工作,尽管静态变量被重新初始化为 NULL
- 如何在静态单例类中以编程方式从exec方法返回
- 单例中的所有内容都是静态的吗
- 静态单例
- GDB 在单步执行单例的静态方法时没有显示这一点?
- 使用指针和使用静态对象实现单例实现之间的区别
- XCode5.1 C 静态单例,但创建了多个实例
- c++中的静态对象与单例类对象
- 非静态成员变量创建,如C++中的静态单例创建
- 我是否需要单例类中的静态变量
- 为什么我们在C++的单例模式中使用静态方法和静态函数
- 强制单例模式的静态函数
- c++, linux,如何将非静态方法从单例传递给pthread_create
- 为什么这个c++静态单例永远不会停止?
- c++模板单例静态指针初始化头文件