class中的静态变量和内存分配及其使用

Static variable and memory allocation in class and its use

我是c++新手,对静态变量的概念不是很了解。 我在 class.

中有一个静态变量
class FCCommunication : public OEMThread
{
public:
    FCCommunication();
    static bool MASTER;
}

我正在初始化我的代码并将内存分配给源文件中的 FCCommunication 使用以下两个语句

FCCommunication * FCObject = 0;

FCObject = new FCCommunication();

现在我的问题是如果我尝试在对象和内存分配像这样完成之前访问 MASTER 变量会发生什么

if(FCCommunication::MASTER)// this gets called before dynamic memory allocation.
{
//do something here.
}

C++ 成员静态变量(class 的)属于那个 class 的所有实例,并且它们在 class 的任何实例初始化之前被初始化。因此,您可以同时使用 FCCommunications::MASTER 和 FCObject->MASTER 来访问那些没有区别的静态变量。

你应该注意的一件事是你必须单独定义那些静态变量。也就是说,你必须在 class 定义之外做这样的事情:

bool FCCommunications::MASTER = false;

静态成员变量与任何其他非成员变量一样分配,具有 静态存储持续时间。这意味着它们最终会在程序启动之前初始化一大块数据,通常称为 .bss.data,具体取决于初始化器是否为零值。

所以静态成员变量实际上并没有与 class 一起分配,你初始化它的值是在分配 class 的其余部分之前通过代码执行设置的。

这意味着无论 class 的任何实例是否存在,您实际上都可以访问静态成员。您可以将它们视为 "global variables with restricted access and scope",因为它们就是这样。

这意味着您的代码没问题。

静态成员是第一次初始化为零的成员... 换句话说,它们属于一个公共池。 任何其他对象都可以访问它。 范围在 class 生命周期是程序的生命周期。