代码之家  ›  专栏  ›  技术社区  ›  Mikulas Dite

C++中的静态属性

  •  1
  • Mikulas Dite  · 技术社区  · 15 年前

    使用这样的伪代码:

    class FooBar {
    public:
        int property;
        static int m_static;
    }
    
    FooBar instance1 = new FooBar();
    FooBar instance2 = new FooBar();
    

    如果我设置instance1的属性,它显然不会影响第二个。但是,如果我改为设置静态属性,那么更改应该传播到类的每个实例。

    如果instance1和2在不同的线程中,还会发生这种情况吗?

    3 回复  |  直到 15 年前
        1
  •  9
  •   kennytm    15 年前

    static 成员本质上是绑定到类的全局变量(不是实例!).全局变量是 线程是本地的,因此对该变量的更改将反映在所有线程中。

    (BTW,C++ 98没有线程的概念。在C++0x中,可以使其线程局部(由{ 7.4.2/1)与

    static thread_local int static_property;
    

    但这是 not widely supported )

        2
  •  2
  •   unwind    15 年前

    是的,只有一个 FooBar::static 程序中的变量。当然,从线程访问同一个变量本身就是危险的。

    实例根本不重要,您也可以从外部类实例访问(公共)静态成员。

    注意:正如所写,这不会编译,因为您不能使用“static”作为变量名,它是一个保留字。

        3
  •  0
  •   Ashish    15 年前

    静态类变量只有一个副本,它由类的所有对象共享,必须同步对它的访问,因为它不是线程安全的。

    推荐文章