operator new

operator newで生成したクラスはコンストラクタを呼ばない。

他の用途としてはクラスの配列(※1)を動的に使いたい時に便利。

T* pClsArray = new T[size]; // デフォルトコンストラクタで初期化

初期化されては困る場合に以下のようにする。

T* pClsArray = static_cast<T*>(operator new [](sizeof(T) * size)); // メモリ確保のみ

・・・

new (&pClsArray[n]) T(); // 配置newで必要な時に作成

デフォルトコンストラクタ以外もちゃんと指定できる。

メモリの解放はoperator deleteを使う。

operator delete [] (pClsArray); // メモリの解放

配置newにdeleteは要らないが、メモリの解放前にデストラクタを手動で呼び出す。

pClsArray[n]::~T(); // これが忘れがち

もちろん配列の個数分必要。

※1 vectorを使う方法も有ります。



(05/12/05) 加筆&文法ミスを修正。

Leave a Reply

最初のコメントを頂けますか?

更新通知を受け取る »
avatar
wpDiscuz