プロが教えるわが家の防犯対策術!

C++で オブジェクト生成時、NEW しない場合、
どこにメモリ領域が作られているのでしょうか?
また、newはmallocと同じで、動的にメモリを確保ということはわかるのですが、
では、newしない場合、静的ということになるのでしょうか?
そうだとすると、静的なオブジェクトとは一体どのようなものをいうのでしょうか?

よろしくおねがいします。

A 回答 (3件)

静的、動的という認識を改めるべきです。



メモリにはスタック領域とヒープ領域というのがあり、
newによって獲得されたメモリはヒープ領域に格納されます。
これはプログラマが明示的でdeleteしないと削除されません。

一方、関数の中で int a = 0、などと宣言して使うローカル変数の場合、
これはプログラムの方で自動的にメモリを獲得します。
このメモリはスタック領域に格納されています。
関数を抜ける際に自動的にメモリを開放します。

newによるメモリ獲得はプログラマが
明示的に獲得、開放をしなければならないが、
関数で上記のローカル変数のように使われるものは
プログラムが自動的に獲得・開放を行ってくれます。

静的→暗黙的、動的→明示的 と言い換える方が
しっくりくるのではないでしょうか。

参考URL:http://fox.flop.jp/wiki/wiki.cgi?page=%A5%B9%A5% …
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2010/04/11 07:38

静的というのは通常、グローバルなオブジェクトとstatic宣言されたオブジェクトを指すようです。

これらは静的領域という、ヒープでもスタックでもないメモリ領域に確保されます。

ちなみにCでは一般的に、プログラム領域、静的領域、スタック領域、ヒープ領域と、4つの領域がメモリ上のどこかに確保されます。


>では、newしない場合、静的ということになるのでしょうか?
>そうだとすると、静的なオブジェクトとは一体どのようなものをいうのでしょうか?
以上の事から、newをしない変数は静的かローカルな変数ということになります。
静的なオブジェクトとは静的領域に確保されるものをいいます。
    • good
    • 1
この回答へのお礼

ありがとうございました。

お礼日時:2010/04/11 07:40

C++の規格というレベルでは、どのオブジェクトがどこに保存されるという決まりはありません。


そういうわけで、自動的に確保される変数も、new で確保される変数も、一般的な意味では、「どこか適切な場所」に確保されます。

さて、new によるオブジェクトの生成は、「動的」というよりも、遅延生成という意味合いが強いわけです。

特に、クラスなどは、生成時にパラメータが必須なケースがあります。new を使わずに、オブジェクトを生成しようとすると、これでは困る場合があります。

たとえば、クラスのメンバーにほかのクラスのインスタンスを持つ場合、そのクラスのインスタンスが生成された時点で、すべてのメンバーが生成される必要があります。
このとき、とりあえず、「ポインタだけ」生成しておいて、その実体は、その後で(パラメータがそろった時点で) new で生成する。

new による生成は、そういう趣が強いわけです。
    • good
    • 4
この回答へのお礼

ありがとうございます。

お礼日時:2010/04/11 07:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています