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

时间:2012-07-12 14:25:00

标签: c++

有一个简单的课程:

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

private:
  int value_;
};

及其全局实例:

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

  2. 稍后当a的非参数和空构造函数被调用为对象a.set(123)时,通过调用A设置的对象a中的值是否仍然存在

3 个答案:

答案 0 :(得分:5)

  

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

没有。您可能无法为尚未开始构建的对象调用成员函数。

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


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

A& global_a()
{
    static A a;
    return a;
}
首次调用a时,将初始化

global_a()。请注意,在多线程程序中,您可能需要关注synchronization of the initialization.

答案 1 :(得分:2)

写作时

A a;

a现在是一个构造的对象。如果AA默认构造函数已被调用

答案 2 :(得分:0)

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

至于2),你所问的并不是很清楚。构造函数只被调用一次(尽管有类似的东西,但不要这样做),这就是首次创建对象的时候。你不能再次在a上调用构造函数,所以这个问题没有意义。