为什么要使用静态字符缓冲区来实例化从DLL加载的C++类
Why use a static char buffer to instantiate a C++ class loaded from a DLL
今天我看到了这段C++代码,用于从EXE(加载DLL后)中实例化驻留在DLL中的类
extern "C"
{
DLL_EXPORT MyClass *CreateClass()
{
static char classBuffer[sizeof(MyClass)];
return new ((void*)classBuffer)MyClass();
}
}
我不明白为什么这里我们不简单地使用新的运算符,而是首先声明静态缓冲区,然后将其与类istation一起使用。如有任何帮助,我们将不胜感激。
因为它避免了对new
和delete
的依赖,但仍然调用构造函数。
但这也意味着你不能(至少在同一个进程中)拥有该类的多个实例。这可能是故意的,以避免不止一个例子,也可能是一个缺陷。这完全取决于类本身的目的。但如果多次调用此函数,那将是一个坏主意,我认为它应该有一些保护措施来防止这种情况的发生。
我觉得这不是解决问题的理想方法,但如果不了解课程和本次实施的总体"背景",很难说还有什么其他解决方案,也很难说哪一个是正确的。
相关文章:
- 从 wxWidgets 中的.DLL加载图标
- 视觉C++:在 DLL 加载期间,全局变量初始化顺序是否具有确定性?
- 无法使用c++/cli包装从c#dll加载函数
- 混合延迟 dll 加载和手动调用 LoadLibraryA 是否安全?
- 无法从 dll 加载函数
- 如何设置我的dll加载,该dll取决于Env-ailiable的某些第三部分DLL
- 将本机非托管的C DLL加载到托管的C#应用中,导致DLL输出垃圾
- 无法在 Python 3.5 上导入 cv2 DLL 加载失败
- 当使用“空dllmain”的dll加载链接到DLL时,应用程序无法启动(0xc0000142)
- 如何从DLL加载的DLL链接到函数
- 如何从Java中的C DLL加载和使用结构和功能
- 我可以用具有相同功能名称的多个DLL加载元素吗?
- 窗口挂钩和 dll 加载
- CEGUI-从DLL加载资源
- 什么可能导致时间函数和 DLL 加载之间死锁
- 以下代码是如何工作的(从DLL加载动态类)
- 错误:Visual Studio中没有为opencv_world310.dll加载符号
- 使用 LoadLibraryA 的 dll 加载错误
- 从 WinAPI C 项目中的专用 DLL 加载图像资源
- 模块"MyShellExt.dll"加载失败