在C ++中使用静态成员作为类类型

时间:2011-01-03 17:03:34

标签: c++ static

基于“c ++ primer”,静态数据成员的类型可以是它所属的类类型:

class Bar {
 public:
     // ...
 private:
     static Bar mem1; // ok
 };

但是,我很难想象这样一个功能有用的场景。我的意思是,为什么你需要一个变量作为类类型?有人可以给我一些例子吗?谢谢。

4 个答案:

答案 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)

singleton

当你有一些类需要在全局范围内只有一个实例可用时。使用全局变量不限制为单个实例,并且可能存在静态inialization的问题

答案 3 :(得分:1)

一个字:singleton