[英]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();
}
使成员函数和数据为非静态,在构造函数中进行初始化,并在析构函数中释放资源。 这将保证正确的调用顺序:初始化-执行操作-释放客户端代码中的资源。
在这种情况下,我将避免使用静态成员。
这是你的问题。 您有一个处理某些数据的类。 无论出于何种原因,都需要在此处理类的所有实例之间共享该数据。 好的,我们有一个非静态的解决方案!
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.