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

Static variable and memory allocation in class and its use

本文关键字:分配 内存 静态 变量      更新时间:2023-10-16

我是 c++ 的新手,我不完全理解静态变量的概念。 我在类中有一个静态变量。

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.
}

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

因此,静态成员变量实际上并没有与类一起分配,并且您将其初始化为的值是由在类的其余部分甚至分配之前执行的代码设置的。

这意味着无论类的任何实例是否存在,您都可以实际访问静态成员。您可以将它们视为"具有受限访问和范围的全局变量",因为这正是它们。

这意味着您的代码很好。

C++(类的(成员静态变量属于该类的所有实例,并且在初始化该类的任何实例之前对其进行初始化。因此,您可以使用FCCommunications::MASTER和FCObject->MASTER来访问这些静态变量,而没有区别。

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

bool FCCommunications::MASTER = false;

静态成员是第一次初始化时初始化为零的成员... 换句话说,它们属于一个公共池。 任何其他对象都可以访问它。 作用域在类内 生存期是程序的生存期。