C++单例模式的问题?
如题,我现在需要一个单例的实现。有一个类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;
{
// 其它成员
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(10)
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++只能实例一个对象的类,两种方式、、、
重载下那个静态获取的函数、、或者给个默认值也行、、
但我不能每次调用GetInstance()的时候都要传递参数……显然不能要这样的效果。
既然你要构造的时候依靠参数来初始化,那你可以提供一个Init带参数的函数,GetInstance().Init(参数)。即可。
是的,在澳洲。老程序员了
回复
在澳洲啊!那这会应该是晚上吧!十小时左右的时差吧!
回复
2小时整
回复
那你还不睡觉啊?哈哈!程序猿都是夜猫子啊!
您在海外?高级程序猿啊!我是菜鸟级别的,初学C++,前辈给点学习经验和建议吧!
哎呀,我又答对了。
哎!对呀!怎么想了半天没想到这个啊!没想到这个蛮简洁的啊。还以为……都是思维定势了。我一直认为单例就一定是一个getInstance()而且是无参的,谢谢了啊!受教了。
把你的构造函数修改成接收参数就行了