延迟构造静态成员对象
Delay the construction of a static member object
项目被编译成一个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
中删除静态关键字时,所有工作正常
不可能在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注入了。所以很难说这将如何发展。注意线程问题
相关文章:
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 枚举成员与静态 int 成员?
- 在运行时有条件地删除类成员或跳过调用该成员对象的构造函数
- 实例成员与静态成员与非类方法的开销
- C++是否有定义的方法来传递指向类的成员对象的成员函数的指针
- (2 问题)"类"类型重新定义(即使 #pragma 一次),以及静态函数内的静态成员对象初始化?
- 声明成员对象而不调用其默认构造函数
- 继承:动态派生类成员与静态派生类成员
- 指向成员对象的指针 - 中断线程
- 作为成员的静态类模板实例会导致未解析的外部符号错误
- 派生类没有额外的数据成员;将基对象静态向下转换为派生对象是否安全
- 是C 静态对象中类的静态数据成员和静态方法
- 使用全局对象静态成员时出现seg错误
- 同一类中类的静态成员对象
- 卸载应用程序域不清除C++ COM 对象静态成员
- 静态成员对象链接错误
- 静态成员对象初始化
- 调用c++中静态成员对象的函数
- 延迟构造静态成员对象
- 可以访问析构函数中的静态成员的静态对象