用c++设计一个类,该类仅仅被允许实例化一次! 这题目是啥意思?求解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用c++设计一个类,该类仅仅被允许实例化一次! 这题目是啥意思?求解相关的知识,希望对你有一定的参考价值。

只允许被实例化一次的叫做单例模式. 

是程序设计模式里面的.


 单例模式有许多种实现方法,在C++中,甚至可以直接用一个全局变量做到这一点,但这样的代码显的很不优雅。 使用全局对象能够保证方便地访问实例,但是不能保证只声明一个对象——也就是说除了一个全局实例外,仍然能创建相同类的本地实例。
《设计模式》一书中给出了一种很不错的实现,定义一个单例类,使用类的私有静态指针变量指向类的唯一实例,并用一个公有的静态方法获取该实例。
       单例模式通过类本身来管理其唯一实例,这种特性提供了解决问题的方法。唯一的实例是类的一个普通对象,但设计这个类时,让它只能创建一个实例并提供对此实例的全局访问。唯一实例类Singleton在静态成员函数中隐藏创建实例的操作。习惯上把这个成员函数叫做Instance(),它的返回值是唯一实例的指针。

定义如下:

class CSingleton

private:
CSingleton()   //构造函数是私有的


static CSingleton *m_pInstance;
public:
static CSingleton * GetInstance()

if(m_pInstance == NULL)  //判断是否第一次调用
m_pInstance = new CSingleton();
return m_pInstance;

;

用户访问唯一实例的方法只有GetInstance()成员函数。如果不通过这个函数,任何创建实例的尝试都将失败,因为类的构造函数是私有的。GetInstance()使用懒惰初始化,也就是说它的返回值是当这个函数首次被访问时被创建的。

追问

有点听不懂……

追答

单例模式是设计模式里面的一种.
比方说,
在游戏编程里面,你想存储某个玩家的等级,经验,金钱的数据.
就用单例模式, 因为单例模式只会实例化一次,所以保存在里面的值不会丢失,
而可以从任何地方调用获取该玩家的数据.懂了吗

追问

嗯嗯,谢谢

参考技术A 没看明白 主要说明下腰算什么?追问

这就是整个题目……

单例模式

单例指仅仅会被实例化一次的类,这样这个类是整个系统中只会存在唯一的实例。单例通常被用来代表那些本质上唯一的系统组件。

类的实例化是通过new来完成的,每次调用new都可以保证创建了一个新的实例。要保证只实例化一次,那么就要保证只能调用一次new。

要实现这一点,需要将构造器私有化。这样调用者就不能使用new来实例化了,但是还是需要一次实例化的,这个该怎么办?又如何得到这个唯一的实例?

 

实现单例有三种方法

  1. 导出共有静态成员
    public class Hello{
        public static final Hello INSTANCE = new Hello();      
    }

     

  2. 使用静态工厂方法
    public class Hello{
        private static final Hello INSTANCE = new Hello();  
        public static getInstance(){
            return INSTANCE;
        }
    }

     

  3. 使用枚举
    public enum Hello{
        INSTANCE;
    }

     

以上是关于用c++设计一个类,该类仅仅被允许实例化一次! 这题目是啥意思?求解的主要内容,如果未能解决你的问题,请参考以下文章

单例模式在项目实战中的几个应用

单例模式在项目实战中的几个应用

单例模式

单例模式

设计模式-单例设计模式

对 Bloc 使用单例