基于“c ++ primer”,静态数据成员的类型可以是它所属的类类型:
class Bar {
public:
// ...
private:
static Bar mem1; // ok
};
但是,我很难想象这样一个功能有用的场景。我的意思是,为什么你需要一个变量作为类类型?有人可以给我一些例子吗?谢谢。
答案 0 :(得分:5)
这才真正有用的唯一一次是实施the "Singleton" pattern(或“简单”给那些鄙视它的人。)
答案 1 :(得分:5)
Singleton是一种可能的用途。另一种可能的用途是提供一个预先打包的即用型实例。
假设您的类具有昂贵的构造函数,使用大量内存并且您需要创建许多实例。好消息是大多数情况都是相同的。您可以使用最广泛的副本静态,并在需要时重复使用它。
实施例。 Bar可以用整数构造。从0构造的实例需求量很大。保持静止是一个很好的选择。
class Bar {
public:
Bar(int n) : n_bar(n) {
// if n!=0, construct new instance of Bar, else recycle static instance
}
void foo() const { // note, it is const
if(n_bar==0)
bar0.foo();
else {
// do something
}
}
private:
int n_bar;
static Bar bar0; // initialize to Bar(0)
};
除了一个静态成员,您还可以根据需要创建一整套静态实例(使用std :: map,其中int为键,Bars为值)。
答案 2 :(得分:4)
当你有一些类需要在全局范围内只有一个实例可用时。使用全局变量不限制为单个实例,并且可能存在静态inialization的问题
答案 3 :(得分:1)
一个字:singleton。