C++单例模式的问题?

Rocky_Sky 发布于 2012/09/13 14:26
阅读 1K+
收藏 2
如题,我现在需要一个单例的实现。有一个类Mine,它的构造函数是Mine(MineStrut& mine);MineStrut是一个结构体,因为每次创建的时候需要外部传递给它一个结构体,这个类需要单例实现,因为只要创建一个就行了。目前的问题是在于我可以创建一个如下的单例,class Singleton:
{
    // 其它成员
public:
    static Singleton * GetInstance()
    {
        if (m_pInstance == NULL)
            m_pInstance = new Singleton(); // 注意此处是一个默认的构造函数,如果我没有默认的构造函数怎么办?我创建一个对象是需要参数的,但是现在在单例中没有这个实参。
        return m_pInstance;
    }
 
private:
    Singleton(){};
    static Singleton * m_pInstance;

}

那么该如何改进呢?

如果用静态来实现class Singleton:
{
    // 其它成员
public:
    static Singleton &GetInstance(){
        static Singleton instance;
        return instance;
    }
 
private:
    Singleton(){};
}

这样构造函数还是不能有形参啊。怎么办啊 ?谢谢诸位。

加载中
0
billzheng
billzheng
把你的构造函数修改成接收参数就行了
class Singleton: 
{ 
public: 
    static Singleton * GetInstance(MineStrut* pMineStruct) 
    { 
        if (m_pInstance == NULL) {
	    m_pInstance = new Singleton(pMineStruct); 
	}
        return m_pInstance; 
    } 
  
private: 
    Singleton(MineStrut* pMineStruct)
	: m_pMineStruct(m_pMineStruct)
	{
	}
	
private:	
	MineStrut* m_pMineStruct;
    static Singleton * m_pInstance; 
};

0
Rocky_Sky
Rocky_Sky
哎!对呀!怎么想了半天没想到这个啊!没想到这个蛮简洁的啊。还以为……都是思维定势了。我一直认为单例就一定是一个getInstance()而且是无参的,谢谢了啊!受教了。
0
billzheng
billzheng
 哎呀,我又答对了。
0
Rocky_Sky
Rocky_Sky
您在海外?高级程序猿啊!我是菜鸟级别的,初学C++,前辈给点学习经验和建议吧!
Rocky_Sky
Rocky_Sky
回复 @billzheng : 那你还不睡觉啊?哈哈!程序猿都是夜猫子啊!
billzheng
billzheng
回复 @Rocky_Sky : 2小时整
Rocky_Sky
Rocky_Sky
回复 @billzheng : 在澳洲啊!那这会应该是晚上吧!十小时左右的时差吧!
billzheng
billzheng
是的,在澳洲。老程序员了
0
backo880607
backo880607

但我不能每次调用GetInstance()的时候都要传递参数……显然不能要这样的效果。

既然你要构造的时候依靠参数来初始化,那你可以提供一个Init带参数的函数,GetInstance().Init(参数)。即可。

Rocky_Sky
Rocky_Sky
嗯嗯!知道了,謝謝你,那會兒剛接觸編程不久,經過這幾個月的閱歷大概也懂得了。寫程式這事兒啊,只要有恒心,便可,書讀百遍其義自現。
0
渡世白玉
渡世白玉

http://www.dushibaiyu.com/2013/08/c%E5%8F%AA%E8%83%BD%E5%AE%9E%E4%BE%8B%E4%B8%80%E4%B8%AA%E5%AF%B9%E8%B1%A1%E7%9A%84%E7%B1%BB.html

C++只能实例一个对象的类,两种方式、、、

重载下那个静态获取的函数、、或者给个默认值也行、、

返回顶部
顶部