ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

placement new(配置new)

ゲームプログラマになる前に覚えておきたい技術で初めて知ったメモリ確保の方法。
まず、operator new()という関数で指定したサイズのメモリを確保できる。

char* memory = operator new( sizeof(char) * 10 );

placement newはその指定したメモリアドレスに領域を確保できる。

char* p = new( memory ) char[10];

このとき、memoryとpの値は同じになる。
解放する場合はoperator delete()を使う。

operator delete( memory );

これを使うメリットとしてはすでに割り当てられたメモリに対してオブジェクトの領域を確保するため、通常のnewよりも高速に行える。細かく頻繁にnewをするような場合に有効。弾幕シューティングの弾一つがクラスで定義されているような場合は良いかも。ただ弾一つをクラスで定義しているのが良くないと思うけど。
今までこういう書き方はほとんど見たことが無いので違和感がある。見慣れていないだけに使い方も間違えてしまいそうだ。よほどのことが無い限り、自分ではこの書き方は使うことが無いだろう。