有一个简单的类:
class A {
public:
A() {}
void set(int value) { value_ = value; }
private:
int value_;
};
及其全局实例:
A a;
在尚未构造的对象
a
上调用方法set
是否可以?例如,当从另一个翻译单元中的另一个全局对象的构造函数调用a.set(123)
时,就会发生这种情况。当
A的非参空构造函数时,调用
稍后为对象a.set(123)
设置的对象a
中的值是否会保留a
调用?
最佳答案
Is it ok to call method set on a not yet constructed object
a
?
没有。您不能为尚未开始构建的对象调用成员函数。
(因为答案是否,所以你的第二个问题不需要回答。)
如果您可能需要在动态初始化期间从多个翻译单元访问这个全局实例,您可以使用 Meyers 单例技术:
A& global_a()
{
static A a;
return a;
}
a
将在首次调用 global_a()
时初始化。请注意,在多线程程序中,您可能需要关注 synchronization of the initialization.。
关于c++ - 尚未构造对象的调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11453989/