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

时间:2017-08-14 06:57:59

标签: c++ static embedded dynamic-memory-allocation

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

3 个答案:

答案 0 :(得分:2)

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

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

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

意思是你的代码没问题。

答案 1 :(得分:0)

C ++成员静态变量(类的)属于该类的所有实例,并且在初始化该类的任何实例之前初始化它们。因此,您可以使用FCC通信:: MASTER和FCObject-> MASTER来访问那些没有差异的静态变量。

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

bool FCCommunications::MASTER = false;

答案 2 :(得分:0)

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