C++类static成员

Huan Lee Lv5

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.
On this page
C++类static成员