假设我有一个类,我有一个静态成员,但我不创建任何类型的对象.内存是否会被静态变量占用?如果它被占用,将它放入课堂有什么意义?
Naw*_*waz 36
没有.
静态成员不属于类的实例.它们不会增加实例和类大小,即使是1位!
struct A
{
int i;
static int j;
};
struct B
{
int i;
};
std::cout << (sizeof(A) == sizeof(B)) << std::endl;
Run Code Online (Sandbox Code Playgroud)
输出:
1
Run Code Online (Sandbox Code Playgroud)
也就是说,尺寸A和B完全相同.静态成员更像是通过访问的全局对象A::j.
请参阅ideone上的演示:http://www.ideone.com/YeYxe
来自C++标准(2003)的$ 9.4.2/1,
静态数据成员不是类的子对象的一部分.该类的所有对象共享的静态数据成员只有一个副本.
从标准中获得9.4.2/3和7美元,
一旦定义了静态数据成员,即使没有创建其类的对象,它也存在.
静态数据成员的初始化和销毁与非本地对象完全相同(3.6.2,3.6.3).
正如我所说,静态成员更像是全局对象!
只要在第一次使用时可用,C++标准就不会明确说明何时分配静态内存.也就是说,它很可能在程序初始化期间分配,从而在需要时立即保证其存在,而无需特殊情况代码来检测和执行访问分配.
将静态数据放入类中的目的与将任何其他数据放入类中的目的相同.通过将数据放入类结构中,您将定义封装命名空间,并能够使用访问器和更改器方法来控制访问; 反过来,这将允许您验证进入静态存储器的数据,并确保在整个数据使用过程中的一致性.