C++类static成员
static成员的使用还是比较频繁的, 网上对相关语法的介绍也比较详细, 本文主要讲一下自己写代码的时候遇到的小坑.
static成员概述
在我看来, static成员属于某个类, 但不属于该类具体的对象. 由此引申出static成员的其他几个特点:
- 不管创建多少个对象, static成员都仅有一份; static 成员变量不占用对象的内存,而是在所有对象之外开辟内存,即使不创建对象也可以访问.
- static成员函数只能调用static成员, 不能调用非static成员. (因为非static成员是属于具体对象的, 而static成员函数不具有
this
指针) - 不能把static成员的初始化放在定义中, 或者说是必须要在定义外重新初始化. static 成员变量的内存既不是在声明类时分配,也不是在创建对象时分配,而是在(类外)初始化时分配. 反过来说,没有在类外初始化的 static 成员变量不能使用.
踩坑
我遇到的坑就是上面的最后一个点, 在使用单例模式时, 我在目标类中声明了一些静态成员, 并在单例模式构造实例时(调用static函数)对这些static成员进行初始化, 这也是不行的!! static 成员变量不占用对象的内存,而是在所有对象之外开辟内存,即使不创建对象也可以访问。因此, 对最后static成员最后一点进行补充: 静态成员变量必须初始化,而且只能在类体外进行。
- Title: C++类static成员
- Author: Huan Lee
- Created at : 2023-09-07 19:19:00
- Updated at : 2024-02-26 04:53:15
- Link: https://www.mirthfullee.com/2023/09/07/C++类static成员/
- License: This work is licensed under CC BY-NC-SA 4.0.