使用类中的参数初始化静态对象成员

Posted

技术标签:

【中文标题】使用类中的参数初始化静态对象成员【英文标题】:Static object member initialization with parameters in class 【发布时间】:2013-12-03 21:12:40 【问题描述】:

虽然我在这个网站上尝试了多次搜索,但我没有找到正确的答案。我再次提出这个问题。

通常,静态对象成员应该在源文件中初始化。

//header file
class A 
private: 
   static B*  bPoint ;

public: 
    static void init(int argc, char** argv);
  ... 
;

//Source file: 
B A::bPoint = new B()              //Normally, this should OK. 

但问题是默认的 B 构造是私有的,现在我必须使用另一个公共构造

 B(int argc, char** argv); 

在这种情况下, new B() 会给出编译错误.. 那么我如何初始化A类中的静态bPoint?

【问题讨论】:

private: B() public: B(int argc, char** argv) 有什么问题? (PS:避免指针) @DieterLücking。 private: B() 的原因是我们不想创建 B 变量。例如,单例。 【参考方案1】:

静态成员应该在源文件中定义,但注意可以先用空指针初始化:

// source file:
B* A::bPoint;  // note the pointer to B

然后,如果您的问题是将A::init() 的参数转发给B() 的构造函数,您可以在A::init() 内为bPoint 分配一个对象:

A::init(int argc, char** argv)

    bPoint = new B(argc, argv);

【讨论】:

以上是关于使用类中的参数初始化静态对象成员的主要内容,如果未能解决你的问题,请参考以下文章

如何初始化派生类中的静态成员?

类的加载过程和对象的创建

java 类中静态变量 和 单例模式下对象中的成员变量 有啥区别?使用场景是啥?

c++中静态成员变量和静态成员函数(笔试经历)

浅谈C++类中的static

关于纯抽象类中的静态成员函数 - 设计模式?