オブジェクト以外も動的にメモリ確保ができます。^^
new演算子とdelete演算子を使って、int型やchar型などもメモリ確保と解放ができます。
int型のメモリ確保と解放
new演算子とdelete演算子を使ってint型のメモリを動的に確保/解放する例を示します。
C言語のmalloc()関数より、new演算子のほうが若干簡単な記述になっています。
new, deleteを使用
int *pNum = new(std::nothrow) int; //メモリ確保できなかったらNULLを返すように
if (pNum != NULL) { //NULLでない事を確認して解放
delete pNum;
pNum = NULL; //未使用になったらNULL代入
}
malloc(), free()を使用
int *pNum = (int *)malloc(sizeof(int));
if (pNum != NULL) { //NULLでない事を確認して解放
free(pNum);
pNum = NULL; //未使用になったらNULL代入
}
new, deleteの方のstd::nothrowは前回確認した例外を発生させずにNULLを
返すようにするための記述です。
また、malloc, free版にも共通している解放時のNULLチェックおよび解放後の
NULL代入は忘れずに書くクセをつけるとよいでしょう。(^^)
配列用のメモリ確保と解放
new演算子を使って、配列用のメモリ確保もできます。
int *pNum = new(std::nothrow) int[100];
[ ]の中に必要な要素数を記述します。この例ではint型のメモリ領域を
100個用意してみました。
次はnew演算子で確保した配列用のメモリ解放についてです。
これは配列名の前に [ ] を記述します。
もし、[ ] を忘れると配列の最初の要素しか解放されませんので要注意です。(^_^;)
delete [] pNum; //このとき、要素数は記述しません
オブジェクトの配列のメモリ確保と解放
最後はオブジェクトの配列を確保/解放する場合についてです。
この場合も書き方は同じです。以下に例を示します。
PeachBox *pPeachBox = NULL;
pPeachBox = new(std::nothrow) PeachBox[24];
:
if (pPeachBox != NULL) {
delete [] pPeachBox; //要素数は記述しませんので注意してください
pPeachBox = NULL;
}
動的なメモリ確保のためのnew, deleteバリバリ使ってみてください。^^
今日の名言
どうすれば物事に熱中できるだろうか。まず自分の手がけている事柄のどんなところが
好きか自分に言い聞かせて、嫌いな部分は捨てて、さっさと好きな部分へ移ることだ、
それから夢中になって行動する-誰かに自分の好きな部分について聞かせる。
なぜそうした事に興味があるのか、教えてやる。
デール・カーネギー
我々は自分が胸に温めてきた計画の廃墟を積み重ねて、天へ向かう。失敗だと思って
いたものが、実は成功だったということに気づきながら。
エイモス・ブロンソン・オルコット
苦さの味を知らぬ者は、甘さも分からない。
ドイツの格言
困難とは作業衣を着た好機会にすぎない。
ヘンリー・J・カイザー