静态数据成员在C ++上的实现

时间:2019-03-21 08:15:36

标签: c++ static-data

我正在研究多线程函数,该函数定义为成员函数并使用对象的公共变量。

我正在考虑两种方法:

1。全局变量

static int var = 0;
 class Object {
   void specialOp { var++; }
}

2。静态数据成员

class Object {
   static int var = 0;
   void specialOp { var++; }
}

我更喜欢第二种选择,但是当我在互联网上浏览时,并没有找到静态数据成员的实现来知道我是否需要锁,或者是否比使用复杂性更高?在全局变量中。

1 个答案:

答案 0 :(得分:4)

C ++中的static关键字根据使用位置的不同而有所不同。

  1. 在全局范围内,它定义了没有链接的全局变量(使该变量在源和包含的头文件的当前编译单元之外不可访问)
  2. 作为类成员,它声明一个全局变量,该变量可以使用Class::variable在任何文件中进行访问,但要符合该类的访问说明(也需要在cpp文件中声明)
  3. 在函数中,声明仅在函数内部可访问的全局变量。保证对同一功能的不同调用可以访问相同的内存。

但是没有一个能够解决多线程问题。要解决多线程问题,您有几种选择:

  1. 声明变量thread_local。这意味着每个线程都有自己的变量版本。
  2. 使用std::atomic或其他类似std::mutex的线程同步原语来保护多重访问