调用尚未构造的对象的方法

Jur*_*aho 0 c++

有一个简单的课程:

class A {
public:
  A() {}
  void set(int value) { value_ = value; }

private:
  int value_;
};
Run Code Online (Sandbox Code Playgroud)

及其全局实例:

A a;
Run Code Online (Sandbox Code Playgroud)
  1. set在尚未构造的对象上调用方法是否可以a?例如,当a.set(123)从另一个翻译单元中的另一个全局对象的构造函数调用时,就会发生这种情况.

  2. 当后来为对象a调用a.set(123)非参数和空构造函数时,通过调用设置的对象中的值是否会保留?Aa

Jam*_*lis 5

是否可以在尚未构造的对象上调用方法集a?

不可以.您不能为尚未开始构建的对象调用成员函数.

(由于答案是否定的,你的第二个问题不需要回答.)


如果您可能需要在动态初始化期间从多个翻译单元访问此全局实例,则可以使用Meyers单例技术:

A& global_a()
{
    static A a;
    return a;
}
Run Code Online (Sandbox Code Playgroud)

aglobal_a()首次调用时将初始化.请注意,在多线程程序中,您可能需要关注初始化的同步.