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
生命周期是程序的生命周期。
我是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 生命周期是程序的生命周期。