如何将变量初始化为以前分配的内存?

时间:2013-12-19 19:20:36

标签: c++ constructor scope

我正在使用C ++,并且正在创建一个ex_stage类(SystemC模块,如果它有任何区别)。在该类的头文件中,我定义:

public:
    ReorderBuffer ROB;

ReorderBuffer是另一个我定义的类,它有自己的构造函数。我已将ROB定义为ex_stage类的全局变量,以便可以从ex_stage内的多个函数访问它。

但是,我无法在运行时初始化ROB,因为它依赖于用户提供的某些功能值。因此,即使我将ROB定义为全局变量,我也无法在定义它的位置初始化它。

通常情况下,我会这样做:

ReorderBuffer ROB(<incoming variables>);
ex_stage的构造函数中

同时构造ROB。但是,由于我已经定义了ROB,我不确定我是否能够在不引起问题的情况下这样做。

执行这样的操作会不会影响原始范围内的ROB,还是会创建一个新的ROB,其范围是ex_stage的构造函数的本地范围?

P.S。 - 对不起,如果这很难理解,如果您需要更多信息请告诉我。

2 个答案:

答案 0 :(得分:0)

如果要初始化全局内容,则必须注意“Global initialization fiasco”。如果我是你,我会使用unnamed namespace来隐藏全局var指针并拥有一些全局函数(仅在命名空间中),例如InitMyGlobalVar()GetMyGlobalVar()来初始化和检索指针。

答案 1 :(得分:0)

如果您知道在ROB构造函数运行时如何初始化ex_stage,您可能会发现member initializer有用。

成员初始值设定项允许以特定方式初始化类成员,而不是只调用其默认构造函数:

class ex_stage {
 public:
  ex_stage() : ROB(<stuff>) {}  // constructor that takes <stuff> will be called

  ReorderBuffer ROB;            // default constructor will _not_ be called
};