C++单例模式的问题?

发布于 2021-11-23 12:26:59 字数 1201 浏览 842 评论 10

如题,我现在需要一个单例的实现。有一个类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(){};
}

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(10

成熟稳重的好男人 2021-11-27 03:52:28

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++只能实例一个对象的类,两种方式、、、

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

成熟稳重的好男人 2021-11-27 03:52:23

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

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

拍不死你 2021-11-27 03:51:11

是的,在澳洲。老程序员了

爱的那么颓废 2021-11-27 03:48:51

回复
在澳洲啊!那这会应该是晚上吧!十小时左右的时差吧!

醉生梦死 2021-11-27 03:48:39

回复
2小时整

只为守护你 2021-11-27 03:38:35

回复
那你还不睡觉啊?哈哈!程序猿都是夜猫子啊!

后知后觉 2021-11-27 03:35:00

您在海外?高级程序猿啊!我是菜鸟级别的,初学C++,前辈给点学习经验和建议吧!

伪装你 2021-11-27 03:25:19

 哎呀,我又答对了。

温柔少女心 2021-11-27 01:34:23

哎!对呀!怎么想了半天没想到这个啊!没想到这个蛮简洁的啊。还以为……都是思维定势了。我一直认为单例就一定是一个getInstance()而且是无参的,谢谢了啊!受教了。

风苍溪 2021-11-26 13:00:46

把你的构造函数修改成接收参数就行了

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; 
};

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文