lin*_*o13 1 c++ static constructor delay
该项目被编译成一个dll,可以注入一个可执行文件
该项目依赖于一个API,它在main()的最初初始化,如下所示:
int DLL_main()
{
TheApi::Initialize();
AnObject anObjectInstance;
//..
}
Run Code Online (Sandbox Code Playgroud)
有一个对象使用类似于此的类定义构造:
class AnObject()
{
AnObject();
~AnObject();
static ApiHelper apiHelperObject; //This object assists in making certain api features easier to use
}
//Inside AnObject.cpp
ApiHelper AnObject::apiHelperObject;
Run Code Online (Sandbox Code Playgroud)
在构造函数中apiHelperObject,有一些API函数调用
注入dll后,没有任何反应(也没有错误消息),但是当从apiHelperObject所有工作中删除静态关键字时,没有任何问题
问题似乎是在初始化API 之前构造静态成员
这是不可能的调用TheApi::Initialize()中apiHelperObject因为有多个不同的API帮助对象的构造函数,这将导致TheApi::Initialize()被调用一次以上
所以问题是:
在构造静态成员对象之前初始化api的最佳方法是什么?或者,延迟构建静态成员的最佳方法是什么?
优选地,不使用指针,因为语法不是特别有利的
谢谢
在普通的标准C++中,您始终可以static通过将对象设置为访问器函数的本地来延迟对象的初始化.
基本上这是迈耶斯的单身人士:
auto helper_object()
-> ApiHelper&
{
static ApiHelper the_object;
return the_object;
}
Run Code Online (Sandbox Code Playgroud)
这里,在标准C++中,对象在第一次执行时通过声明进行初始化.
但是C++标准并不主动支持动态库,更不用说DLL注入了.因此很难说这将如何发挥作用.注意线程问题.