gpt4 book ai didi

c++ - 这是单例模式的正确实现吗?

转载 作者:太空狗 更新时间:2023-10-29 19:49:06 24 4
gpt4 key购买 nike

<分区>

下面的代码是我对单例模式的实现。

 #include <iostream>

template<class T>
class Uncopyable
{
protected:
Uncopyable(){}
~Uncopyable(){}
private:
Uncopyable(const Uncopyable<T>&);
Uncopyable& operator=(const Uncopyable<T>&);
};

template <class T>
class Singleton : private Uncopyable<T>
{
public:
static T* getInstancePtr()
{
return instance;
}
protected:
Singleton<T>()
{
if(instance == 0)
{
instance = new T();
}
};
~Singleton<T>()
{

};
private:
static T* instance;
};
template<class T> T* Singleton<T>::instance = 0;

class Test : public Singleton<Test>
{
public:
Test(){};
~Test(){};
inline void test() const
{
std::cout << "Blah" << std::endl;
}
private:
friend class Singleton<Test>;
protected:
};

int main(int argc, char* argv[])
{
Test* t = Test::getInstancePtr();
Test* t2 = Test::getInstancePtr();

t->test();
t2->test();

return 0;
}

它以这种形式工作,但是我不确定它是否真的正确,因为 Singleton 的构造函数和析构函数是 protected 而不是私有(private)的。如果我将它们声明为私有(private)代码将无法编译,因为类无法访问它们。此实现是否可以安全使用,或者我可以做些什么来改进它以确保只创建和使用一个实例。

谢谢

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com