c++ - 尚未构造对象的调用方法

标签 c++

有一个简单的类:

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

private:
  int value_;
};

及其全局实例:

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

  2. 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/

相关文章:

c++ - 解析类似 INI 的配置文件

c++ - 为有序链表 C++ 编写插入算法

c++ - 如何在 OpenCV 2.3.1 中使用轮廓?

c++ - 使用 DPI 从 C++ 函数中的 SV 读取值时出错

c++ - 从 unique_ptr<T[]> 初始化 shared_ptr<T>

c++ - CMake - 每次构建项目时如何停止构建每个依赖项

python - swig,传递没有指定尺寸的 carrays

c++ - 使用 c++ boost::python 从 python 函数返回的列表中获取数据?

c++ - 不同情况下如何处理多条法线的顶点?

c++ - 如何专门化模板函数以让它接受将 char 数组作为参数传递?