3

今日、私はこのC ++コードがEXEからDLLに存在するクラスをインスタンス化するのを見ました(DLLをロードした後)

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

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

ここで単にnew演算子を使用せず、代わりに最初に静的バッファーを宣言してから、クラスistantiationで使用する理由がわかりません。どんな助けでも大歓迎です

4

1 に答える 1

3

newとへの依存を回避しdeleteますが、それでもコンストラクターを呼び出すためです。

ただし、[少なくとも同じプロセス内で] クラスの複数のインスタンスを使用できないことも意味します。これは、複数のインスタンスを回避するための意図的なものであるか、欠陥である可能性があります。それはすべて、クラス自体の目的が何であるかに依存します。しかし、この関数を複数回呼び出すのは悪い考えです。それに対する保護が必要だと思います。

これは問題を解決するための理想的な方法ではないと思いますが、クラスとこの実装の全体的な「背景」を理解しないと、他にどのような解決策があり、どれが正しい解決策であるかを言うのは困難です。

于 2013-02-15T17:46:09.337 に答える