如果我有一个带有静态变量的类:
class A {
public:
...
private:
static int var;
}
多个实例是否会class A
为静态变量使用相同的地址var
?如果不是,将变量定义为指针会导致相同的地址吗?IE:
class A {
public:
...
private:
static int* var;
}
如果我有一个带有静态变量的类:
class A {
public:
...
private:
static int var;
}
多个实例是否会class A
为静态变量使用相同的地址var
?如果不是,将变量定义为指针会导致相同的地址吗?IE:
class A {
public:
...
private:
static int* var;
}
一个类的所有实例都将使用相同的副本,从而使用静态变量的地址。如果您将其声明为指针,则无关紧要。
所有实例都将看到静态变量的相同地址,因为该变量只有一个实例(这是变量的全部点static
)。显然,如果只有一个实例,它就只能存在于一个地方。它是int
一个指针还是一个指针都没有关系,对于指针,您只有一个可以使用的指针实例。
A类的所有实例都将共享同一个实例var
。如果我们看一下草案 C++ 标准部分9.4.2
静态数据成员第1段说(强调我的):
静态数据成员不是类的子对象的一部分。如果将静态数据成员声明为 thread_local,则每个线程都有一份该成员的副本。如果静态数据成员未声明为 thread_local,则该数据成员的一份副本由该类的所有对象共享。
此外,第2段说:
[...][注意:一旦定义了静态数据成员,即使没有创建其类的对象,它也存在。[...]