我想知道当我声明一个变量并初始化一个函数或方法之外的值时使用了什么存储空间,例如,

// CBar.h>
class CBar
{
public:
   CBar();
   ~CBar();
};

// CBar.cpp
std::string const NAME = "mr.foo";

CBar::CBar()
{
   std::cout << NAME << std::endl;
}

CBar::~CBar()
{
}

我在方法之外声明的NAME变量。声明和初始化此NAME变量是否有问题?每次我创建CBar实例时,NAME变量仍然存在吗?

谢谢。

最佳答案

在您的代码中,NAME是一个静态变量(例如文件CBar.cpp中的全局变量)。它在程序的开始处实例化一次,并在整个程序中运行(内存保持分配状态)。

无论您实例化或删除CBar对象多少次,该值/内存都将始终是可访问的(从CBar.cpp中),因为该变量独立于CBar类。

从技术上讲,用于静态存储器的内存存在于初始化的数据段中。请参阅以下答案以更好地说明存储区域:Global memory management in C++ in stack or heap?

关于c++ - 在方法或函数外部声明的变量使用什么内存,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19614270/

10-12 23:03