3

今天我看到这个 C++ 代码从 EXE 中创建一个驻留在 DLL 中的类(加载 DLL 之后)

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

        return new ((void*)classBuffer)MyClass();
    }
}

我不明白为什么在这里我们不简单地使用 new 运算符,而是首先声明该静态缓冲区,然后将其与类实例化一起使用。任何帮助表示赞赏

4

1 回答 1

3

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

但这也意味着您不能拥有该类的多个实例[至少在同一个进程中]。这可能是故意的,以避免不止一个实例,也可能是一个缺陷。这完全取决于课程本身的目的是什么。但是多次调用这个函数是个坏主意——我认为它应该有一些保护措施。

我觉得这不是解决问题的理想方法,但是如果不了解类的整体“背景”和这个实现,很难说还有什么其他的解决方案,哪个是正确的。

于 2013-02-15T17:46:09.337 回答