【问题标题】:How To Initialize a Variable to Previously Allocated Memory?如何将变量初始化为先前分配的内存?
【发布时间】:2013-12-19 19:20:36
【问题描述】:

我正在使用 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 的构造函数的本地范围?

附: - 抱歉,如果这很难理解,如果您需要更多信息,请告诉我。

【问题讨论】:

  • 您可以通过将对象声明为指针来延迟对象的初始化。考虑使用unique_ptr&lt;RorderBuffer&gt;(来自#include &lt;memory&gt;)。

标签: c++ constructor scope


【解决方案1】:

当你想初始化一些全局的东西时,你必须小心“Global initialization fiasco”。如果我是你,我会使用 unnamed namespace 来隐藏全局变量指针,并使用一些全局函数(就在命名空间内),例如 InitMyGlobalVar()GetMyGlobalVar() 来初始化和检索指针。

【讨论】:

    【解决方案2】:

    如果您知道如何在 ex_stage 构造函数运行时初始化 ROB,您可能会发现 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
    };
    

    【讨论】:

      猜你喜欢
      • 2020-10-03
      • 2015-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-25
      • 2021-02-24
      • 2012-12-04
      相关资源
      最近更新 更多