繁体   English   中英

C ++初始化类静态数据成员

[英]C++ Initialize class static data member

我有一个具有许多静态函数的类,可以执行一些计算。 但是,在计算之前,我需要传递数据以初始化一些静态数据成员。 目前,我有一个init(data)函数和一个clearResource()函数,应在使用该类之前和之后调用它。 有更好的方法吗?

例如:

classA(){
 static int a;
 static init(int b) {
    a = b;
 }
 static functionA(){
   //perform something based on value of a;
    switch(a){
    }
 }

}

int main(){
  classA::init(5);
  classA::functionA();
 }

谢谢

避免使用静态成员函数:让构造函数初始化数据,并让析构函数清除资源(请参阅RAII )。 如果不能更改现有的类,请实现一个帮助程序类,该类从其构造函数调用init并从其析构函数调用clearResource

您可以使用这种设计

class A()
{
public:
 static int a;
 static void functionA(int arg = A::a)
 {
  if(A::a != arg)
   A::a = arg;
  ...
 }
};

int A::a = 0;
int main()
{
 A::functionA();
}

你应该运用RAII的概念:看到这个这个问题。

使成员函数和数据为非静态,在构造函数中进行初始化,并在析构函数中释放资源。 这将保证正确的调用顺序:初始化-执行操作-释放客户端代码中的资源。

在这种情况下,我将避免使用静态成员。

这是你的问题。 您有一个处理某些数据的类。 无论出于何种原因,都需要在此处理类的所有实例之间共享该数据。 好的,我们有一个非静态的解决方案!

class Data : boost::noncopyable
{
public:
    Data()
    {
        // initialise all of our data.
    }; // eo ctor
}; // eo class Data

实例化该类的位置取决于您。 它可以是启动时运行的应用程序类的成员,也可以是某些根目录的一部分。 它只需要是可访问的,不需要是静态的也不是单例的。

class DataProcessor
{
private:
    Data& m_Data;

public:
    DataProcessor(Data& _data) : m_Data(_data)
    {
    }; // eo ctor
}; // eo class DataProcessor

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM