为什么要使用静态字符缓冲区来实例化从DLL加载的C++类

Why use a static char buffer to instantiate a C++ class loaded from a DLL

本文关键字:DLL 加载 C++ 实例化 静态 缓冲区 字符 为什么      更新时间:2023-10-16

今天我看到了这段C++代码,用于从EXE(加载DLL后)中实例化驻留在DLL中的类

extern "C"
{
    DLL_EXPORT MyClass *CreateClass()
    {
        static char classBuffer[sizeof(MyClass)];
        return new ((void*)classBuffer)MyClass();
    }
}

我不明白为什么这里我们不简单地使用新的运算符,而是首先声明静态缓冲区,然后将其与类istation一起使用。如有任何帮助,我们将不胜感激。

因为它避免了对newdelete的依赖,但仍然调用构造函数。

但这也意味着你不能(至少在同一个进程中)拥有该类的多个实例。这可能是故意的,以避免不止一个例子,也可能是一个缺陷。这完全取决于类本身的目的。但如果多次调用此函数,那将是一个坏主意,我认为它应该有一些保护措施来防止这种情况的发生。

我觉得这不是解决问题的理想方法,但如果不了解课程和本次实施的总体"背景",很难说还有什么其他解决方案,也很难说哪一个是正确的。