你知道一个好的设计模式,可以确保只创建一个对象实例,而不会在c ++中使这个对象全局化吗? 这就是单身人士所做的事情,但我真的需要它不是因为代码访问安全原因而全球化。
感谢您的帮助!
答案 0 :(得分:2)
我想你想要这样的东西(注意:从an answer I already wrote and forgot about复制粘贴):
#include <stdexcept>
// inherit from this class (privately) to ensure only
// a single instance of the derived class is created
template <typename D> // CRTP (to give each instantiation its own flag)
class single_instance
{
protected: // protected constructors to ensure this is used as a mixin
single_instance()
{
if (mConstructed)
throw std::runtime_error("already created");
mConstructed = true;
}
~single_instance()
{
mConstructed = false;
}
private:
// private and not defined in order to
// force the derived class be noncopyable
single_instance(const single_instance&);
single_instance& operator=(const single_instance&);
static bool mConstructed;
};
template <typename T>
bool single_instance<T>::mConstructed = false;
现在,如果类被构造多次,则会出现异常:
class my_class : private single_instance<my_class>
{
public:
// usual interface (nonycopyable)
};
int main()
{
my_class a; // okay
my_class b; // exception
}
但是,无法在C ++的编译时强制执行单实例策略。
(同样擅长注意单身人士是愚蠢的。全球可接触和单一创造是两个不同的概念,只能巧合,而不是设计。)
答案 1 :(得分:1)
您可以使用具有典型静态Instance()
访问函数的单例,但可以使用此函数private
。然后,只允许访问另一个类,使其成为单例类的friend classes。
答案 2 :(得分:0)
使构造函数和assignemnt运算符保持私有。
然后创建唯一一个将类的一个实例创建为该类朋友的函数 由于您正在编写函数,因此它是唯一可以创建对象的函数(并且应用程序中没有其他函数)。
答案 3 :(得分:0)
您可以使用命名空间和/或嵌套和本地类控制单例类/实例方法的可见性
单身教程 http://www.yolinux.com/TUTORIALS/C++Singleton.html
本地类示例 http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=191