0

有一个简单的类:

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

private:
  int value_;
};

及其全局实例:

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

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

4

3 回答 3

5

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

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

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


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

A& global_a()
{
    static A a;
    return a;
}

a将在global_a()第一次调用时初始化。请注意,在多线程程序中,您可能需要关注初始化的同步。

于 2012-07-12T14:27:24.177 回答
2

当你写

A a;

a现在是一个构造对象。如果已经调用A了默认构造函数A

于 2012-07-12T14:27:31.447 回答
0

如果在 1) 中您的意思是可以在构造函数中调用set,那么是的,这很好,因为它不是虚拟方法。您不能在构造函数中调用虚方法。

至于2),你问的不是很清楚。构造函数只被调用一次(虽然有一些方法可以解决这类事情,但不要这样做),那就是第一次创建对象的时候。您不能a第二次调用构造函数,所以这个问题没有任何意义。

于 2012-07-12T14:26:28.560 回答