2013年9月25日水曜日

C++ new演算子

前回の続き
ここでは動的なオブジェクト生成について見て行きます。^^
new演算子を使うと、malloc()関数で動的にメモリ確保するのと同じように、
動的なオブジェクトの生成ができます。

//PeachBoxクラスのポインタを準備
PeachBox *pPeachBox = NULL;        //NULLで初期化しておきます
pPeachBox = new PeachBox;     //new演算子でPeachBoxオブジェクトの
                                                    //領域確保します
                        //pPeachBoxはPeachBoxオブジェクトの
                       //先頭アドレスを指し示します

このようにまとめて書いてもOKです。^^

PeachBox *pPeachBox = new PeachBox;

こちらは初期化もされるので一石二鳥ですね。

new演算子を使用してオブジェクトを生成すると、オブジェクトのためのメモリ領域が
動的に確保させます。そして、メモリ確保のタイミングでコンストラクタが呼ばれます。

一方静的にオブジェクトを生成した場合は、宣言と同時にコンストラクタが呼ばれます。
PeachBox myPeachBox;

メモリ確保の注意点
オブジェクトのメモリ確保についてですが、C言語のmalloc()関数を使うとコンストラクタが
呼ばれないのでメンバ変数が初期化できません。
そのため、実行時に予期せぬ動作をしてしまいます。オブジェクトを生成するときは、
malloc()関数を使わないようにしてください。

//予測不可能な動作をするダメダメな例
PeachBox *pPeachBox = (PeachBox *)malloc(sizeof(PeachBox));
if (pPeachBox != NULL) {
                :

でも、このような斬新なことを試みる発想力は悪くないと思います。^^
次回はdeleteとサンプルプログラムの紹介です。

今日の名言
「北風がバイキングを作った」スカンジナビアにこんなことわざがあるが、これは我々の
人生に対する警鐘と考える事もできる。安全で快適な生活、楽しくのんびりした生活さえ
あれば人間は自然に幸福になり、善良になるという考え方は、いったいどこから来たの
だろう?それどころか自己憐憫に陥っている人間は、クッションの上にそっと寝かされて
いても依然として自分を哀れみ続ける。歴史を見ればわかるように、人間が自己の責任
を背負って立てば、環境が良かろうと悪かろうと中程度であろうと、気骨のある人格が
育ち、幸福が必ずやってくる。だからこそ、北風がバイキングの生みの親となったのだ。
                                 ハリー・エマーソン・フォスディック

現代は演出の時代である。単に事実を述べるだけでは十分ではない。事実に動きを与え
興味を添えて演出しなければならない。興行的な手法を用いる必要がある。映画、ラジオ、
テレビなど、みなこの手法を使っている。人の注意を引くには、これによるのが何よりも
有効だ。
                                 デール・カーネギー