就在前几天,我看到了使用所谓的单例模式的代码.意思是某些东西
class MySingleton{
public:
void foo() { ... }
static MySingleton&get_instance(){
static MySingleton singleton;
return singleton
}
private:
MySingleton(){ ... }
~MySingleton(){ ... }
int bar;
};
Run Code Online (Sandbox Code Playgroud)
我确实想知道为什么会这样做:
但是,我不明白为什么这种做事方式优于一些免费功能.我实施它的方式是放
namespace some_name{
void foo();
}
Run Code Online (Sandbox Code Playgroud)
在标题和
namespace some_name{
void foo(){
...
}
}
Run Code Online (Sandbox Code Playgroud)
在实现文件中.如果我需要初始化和/或清理,我要么添加一些必须显式调用或添加的函数
namespace{
class Dummy{
Dummy(){ ... }
~Dummy(){ ... }
}dummy;
}
Run Code Online (Sandbox Code Playgroud)
进入实施文件.
我知道这是从语义的角度来看单例,但是我看到第一个变体在C++代码中使用得比第二个更常见.为什么?我认为第二个版本略胜一筹,所以我问自己是否遗漏了一些明显的东西.
你能解释一下为什么每个人都使用第一个变种吗?我没有看到在C语言中做旧事情的单一优势.
根据党的路线(E. Gamma,R.Helm,R.Johnson和J. Vlissides.设计模式:可重复使用的面向对象软件的元素 .Addison-Wesley,Reading,MA,1995,p.128),与您提出的解决方案相比,singleton具有以下优势.
话虽如此,在大多数情况下,我认为额外的复杂性过多,很少使用我编写的代码中的模式.但是,当您设计其他人将使用的API时,我可以看到它的价值.
这有帮助吗?
单身人士有什么不好? http://steve.yegge.googlepages.com/singleton-considered-stupid
换句话来说:单例是一个美化的全局变量,所以只需将它“实现”为全局变量即可。
| 归档时间: |
|
| 查看次数: |
3738 次 |
| 最近记录: |