21xrx.com
2024-12-22 22:36:38 Sunday
登录
文章检索 我的文章 写文章
如何编写C++单例类
2023-07-03 07:49:39 深夜i     --     --
单例类 C++ 设计模式 对象唯一性 实例化

单例模式是一种很常见的设计模式,通常用于限制一个类只能被实例化一次,保证系统中只有一个该类的实例,这样能够方便地在系统中对该实例进行统一的管理和调用。在C++中,编写单例类的方法有多种,下面介绍一种简单易懂的方法。

一个最简单的单例类示例代码如下:


class Singleton

{

public:

  static Singleton* getInstance()

  {

    if(instance_ == NULL)

    {

      instance_ = new Singleton();

    }

    return instance_;

  }

private:

  Singleton(){}

  static Singleton* instance_;

};

Singleton* Singleton::instance_ = NULL;

在这段代码中,Singleton类的构造函数是私有的,只能通过getInstance()函数来获取该类的唯一实例。getInstance()函数通过判断实例是否为空来决定是否要创建新的实例,如果实例已经存在,就直接返回该实例;否则,就创建一个新实例并返回。需要注意的是,Singleton* instance_变量需要在类外进行初始化。

此外,为了防止外部进行拷贝构造等操作创建新实例,还可以通过将拷贝构造函数和赋值运算符设为私有,来实现单例类。


class Singleton

{

public:

  static Singleton* getInstance()

  {

    if(instance_ == NULL)

    {

      instance_ = new Singleton();

    }

    return instance_;

  }

private:

  Singleton(){}

  Singleton(const Singleton&){}

  Singleton& operator=(const Singleton&){}

  static Singleton* instance_;

};

Singleton* Singleton::instance_ = NULL;

这样,在客户端程序中,只需通过getInstance()函数获取实例即可,如下所示:


Singleton* instance = Singleton::getInstance();

综上,编写C++单例类的方法有多种,但每种方法都要确保在系统中只有一个类的实例。鉴于这种特殊需求,我们需要仔细思考选择何种编写方法来满足自己的程序要求。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复