C++ 延迟静态成员对象的构造
该项目被编译成一个dll,并被注入到一个可执行文件中 该项目依赖于一个API,该API主要在一开始就初始化,如下所示:C++ 延迟静态成员对象的构造,c++,constructor,static,delay,C++,Constructor,Static,Delay,该项目被编译成一个dll,并被注入到一个可执行文件中 该项目依赖于一个API,该API主要在一开始就初始化,如下所示: int DLL_main() { TheApi::Initialize(); AnObject anObjectInstance; //.. } 有一个对象的类定义与此类似: class AnObject() { AnObject(); ~AnObject(); static ApiHelper apiHelperObject
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中删除static关键字时,所有工作正常
问题似乎是静态成员是在API初始化之前构造的
无法在apiHelperObject的构造函数中调用api::Initialize,因为存在多个不同的api helper对象,这将导致多次调用api::Initialize
因此,问题是:
在构造静态成员对象之前,初始化api的最佳方法是什么?或者,延迟静态构件施工的最佳方法是什么
优选地,不使用指针,因为语法不是特别受欢迎的
谢谢< p>在普通的标准C++中,你总是可以通过使它在访问器函数中本地化来延迟静态对象的初始化。 本质上,这是梅耶斯的单身:
auto helper_object()
-> ApiHelper&
{
static ApiHelper the_object;
return the_object;
}
这里,在标准C++中,对象初始化时第一次执行通过声明。
<>但C++标准不积极支持动态库,更不用说DLL注入。所以很难说这会是怎样的结果。谨防线程问题。< P>普通的C++标准中,通过使本地对象访问Access函数,可以延迟初始化静态对象。 本质上,这是梅耶斯的单身:
auto helper_object()
-> ApiHelper&
{
static ApiHelper the_object;
return the_object;
}
这里,在标准C++中,对象初始化时第一次执行通过声明。
<>但C++标准不积极支持动态库,更不用说DLL注入。所以很难说这会是怎样的结果。当心线程问题。问题似乎在于静态成员是在API初始化之前构造的,为什么不呢?它是静态的。它是在其他任何事情发生之前初始化的。停止使用初始化函数,并正确使用构造函数。对于o型,我深表歉意,它不是一个经过编辑的函数声明。api不是我的,必须调用初始化函数问题似乎是在初始化api之前构造静态成员,为什么不呢?它是静态的。它是在其他任何事情发生之前初始化的。停止使用初始化函数,并正确使用构造函数。对于o型,我深表歉意,它不是一个经过编辑的函数声明。api不是我的,必须调用初始化函数