
No.1ベストアンサー
- 回答日時:
静的、動的という認識を改めるべきです。
メモリにはスタック領域とヒープ領域というのがあり、
newによって獲得されたメモリはヒープ領域に格納されます。
これはプログラマが明示的でdeleteしないと削除されません。
一方、関数の中で int a = 0、などと宣言して使うローカル変数の場合、
これはプログラムの方で自動的にメモリを獲得します。
このメモリはスタック領域に格納されています。
関数を抜ける際に自動的にメモリを開放します。
newによるメモリ獲得はプログラマが
明示的に獲得、開放をしなければならないが、
関数で上記のローカル変数のように使われるものは
プログラムが自動的に獲得・開放を行ってくれます。
静的→暗黙的、動的→明示的 と言い換える方が
しっくりくるのではないでしょうか。
参考URL:http://fox.flop.jp/wiki/wiki.cgi?page=%A5%B9%A5% …
No.3
- 回答日時:
静的というのは通常、グローバルなオブジェクトとstatic宣言されたオブジェクトを指すようです。
これらは静的領域という、ヒープでもスタックでもないメモリ領域に確保されます。ちなみにCでは一般的に、プログラム領域、静的領域、スタック領域、ヒープ領域と、4つの領域がメモリ上のどこかに確保されます。
>では、newしない場合、静的ということになるのでしょうか?
>そうだとすると、静的なオブジェクトとは一体どのようなものをいうのでしょうか?
以上の事から、newをしない変数は静的かローカルな変数ということになります。
静的なオブジェクトとは静的領域に確保されるものをいいます。

No.2
- 回答日時:
C++の規格というレベルでは、どのオブジェクトがどこに保存されるという決まりはありません。
そういうわけで、自動的に確保される変数も、new で確保される変数も、一般的な意味では、「どこか適切な場所」に確保されます。
さて、new によるオブジェクトの生成は、「動的」というよりも、遅延生成という意味合いが強いわけです。
特に、クラスなどは、生成時にパラメータが必須なケースがあります。new を使わずに、オブジェクトを生成しようとすると、これでは困る場合があります。
たとえば、クラスのメンバーにほかのクラスのインスタンスを持つ場合、そのクラスのインスタンスが生成された時点で、すべてのメンバーが生成される必要があります。
このとき、とりあえず、「ポインタだけ」生成しておいて、その実体は、その後で(パラメータがそろった時点で) new で生成する。
new による生成は、そういう趣が強いわけです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
クラスのアドレスを引数として渡したい
C言語・C++・C#
-
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
-
4
newしないインスタンス?実体化しなくてもいいの?
Java
-
5
画面を強制的に再描画させる方法
C言語・C++・C#
-
6
C言語での引数の省略方法
C言語・C++・C#
-
7
C++でアボート(Abort)で処理が強制終了してしまう
C言語・C++・C#
-
8
deleteで開放するとエラーになる原因がわからない
C言語・C++・C#
-
9
C++言語で、構造体のコピーは可能(しても良い)のでしょうか?
C言語・C++・C#
-
10
リソースの編集ができません。リソースビューが開かない
C言語・C++・C#
-
11
intとlongは同じ?
C言語・C++・C#
-
12
CString から LPCTSTRの型に変換
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
fread関数および動的なメモリ確...
-
C++で、メンバもヒープに確保さ...
-
C言語 mallocとfreeについて
-
malloc でのメモリ取得状況の可...
-
DLLのマルチスレッドの動作につ...
-
void*型のデータサイズ
-
newしないオブジェクトについて
-
C# Listを使わずに2次元配列の...
-
VBAのプログラムで、DIAG = 1# ...
-
C言語 配列の長さの上限
-
関数から配列を返すには?
-
CStringからchar*への型変換に...
-
C言語のポインタに直接アドレス...
-
C言語において、 配列要素をひ...
-
VBA基本構文の作り方 2列の...
-
構造体のリストをソートしたい。
-
【速いブラインドタッチ】手を...
-
配列を使わずに、変数名を動的...
-
char*を初期化したいのですが
-
System.IO.Directory.GetFiles...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c言語のポインタへの文字列入力...
-
allocってなんですか?
-
ビットをローテートするプログ...
-
ヒープメモリの解放について
-
newしないオブジェクトについて
-
構造体でchar name[]と*nameの...
-
ポインタのポインタの初期化法
-
行列内の行の交換,列の交換を...
-
C++で、メンバもヒープに確保さ...
-
DLLのマルチスレッドの動作につ...
-
配列の添え字の最大数とは?
-
mallocで確保するメモリの領域...
-
C++のnewで確保したメモリーの...
-
C言語に関する質問
-
Win32APIでのメモリ管理について
-
変数に文字列を代入する方法を...
-
領域の確保について
-
free関数で動作が止まる
-
CreateFileMapping について
-
指定したメモリアドレスの値の...
おすすめ情報