C++ でメモリ マネージャーを作成しました。詳細は重要ではありませんが、セットアップ時にヒープから大きなバイト配列を割り当て、その割り当て関数が呼び出されると、一部の空きメモリ バイトを 0 にクリアし、それらへのポインタを返します。したがって、使用例は次のようになります。
memoryManager->initialise(1024); //Allocates 1024 bytes
T* t = memoryManager->allocate<T>(); //Prepares sizeof(T) bytes and returns a ptr
これはうまく機能します。私は徹底的にテストしましたが、意図したとおりに機能します。ただし、「偽の」ポインターを作成するだけなので、オブジェクトのコンストラクターは呼び出されません。これは、別のクラスから継承するクラスを割り当てようとするとバラバラになります。その vptr は設定されません。これは、コンストラクターの開始時に行われ、プログラマーから隠されているためです。そのため、基本クラスの関数を呼び出すとすぐに、プログラムがセグ フォールトでクラッシュします。
これを回避する方法はありますか?自分で設定できますか?
編集:これを行う方法を探している他の人には、「placement new」を検索してください。詳細については、コメントをお読みください。