C ++中的静态属性

时间:2010-08-27 12:47:07

标签: c++ multithreading static

使用这样的伪代码:

class FooBar {
public:
    int property;
    static int m_static;
}

FooBar instance1 = new FooBar();
FooBar instance2 = new FooBar();

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

如果instance1和2在不同的线程中,这也会发生吗?

3 个答案:

答案 0 :(得分:9)

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

(顺便说一句,C ++ 98没有线程的概念。在C ++ 0x中你可以使用

使其成为线程局部的(通过§9.4.2/ 1)
static thread_local int static_property;

但这是not widely supported。)

答案 1 :(得分:2)

是的,程序中只有一个FooBar::static变量实例。当然,从线程访问相同的变量本质上是危险的。

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

注意:如上所述,由于您不能使用“static”作为变量的名称,因此无法编译,这是一个保留字。

答案 2 :(得分:0)

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