延迟构造静态成员对象

Delay the construction of a static member object

本文关键字:成员对象 静态 延迟      更新时间:2023-10-16

项目被编译成一个dll并注入到可执行文件

项目依赖于在main()中初始化的API,像这样:

int DLL_main()
{
    TheApi::Initialize();
    AnObject anObjectInstance;
    //..
}

有一个用类定义构造的对象:

class AnObject()
{
    AnObject();
    ~AnObject();
    static ApiHelper apiHelperObject; //This object assists in making certain api features easier to use
}
//Inside AnObject.cpp
ApiHelper AnObject::apiHelperObject;

apiHelperObject的构造函数中有一些API函数调用

在注入dll时,什么也没有发生(也没有错误消息),当从apiHelperObject中删除静态关键字时,所有工作正常

问题似乎是静态成员在 API初始化 之前被构造

不可能在apiHelperObject的构造函数中调用TheApi::Initialize(),因为有多个不同的api helper对象,这将导致TheApi::Initialize()被调用不止一次

所以问题是:

在构造静态成员对象之前初始化api的最佳方法是什么?或者,延迟静态构件的构造的最佳方法是什么?

最好不要使用指针,因为语法不是特别受欢迎

Thank you

在普通的标准c++中,您总是可以通过将static对象设置为访问器函数的局部来延迟初始化。

这是Meyers的单例:

auto helper_object()
    -> ApiHelper&
{
    static ApiHelper the_object;
    return the_object;
}

这里,在标准c++中,对象在第一次执行通过声明时被初始化。

但是c++标准并不积极支持动态库,更不用说DLL注入了。所以很难说这将如何发展。注意线程问题