私は埋め込み C++ プロジェクトに取り組んでおり、可能な限りメモリを静的に割り当てる予定です。そのため、すべてのクラスとグローバルな新規/削除の新規/削除をオーバーライドする一連の関数を作成しています。
単純な実装を次に示します。
class MyClass
{
int x;
float y;
double z;
static MyClass m_preAllocatedObjects[100]; //Solution 1
static char m_preAllocatedMemory[100 * sizeof(MyClass)]; //Solution 2
static char* getPreAllocatedMemory() // Solution 3
{
static char localStaticMemory[100 * sizeof(MyClass)];
return localStaticMemory;
}
static void* operator new(size_t s){
void* p; /*fill p from the pre-allocated memory or object*/;
return p;
}
};
解決策 1 : デフォルトのコンストラクターを持つオブジェクトに対してのみ機能します。
解決策 2 : コンパイル エラーが発生しますuse of undefined type 'MyClass'
。これが私が尋ねていることです。
解決策 3 : この解決策は正常に機能します。
質問は:
sizeof(MyClass) を取得できないのに、MyClass の静的メンバーを作成できるのはなぜですか?