![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
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をしない変数は静的かローカルな変数ということになります。
静的なオブジェクトとは静的領域に確保されるものをいいます。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_04.png?5a7ff87)
No.2
- 回答日時:
C++の規格というレベルでは、どのオブジェクトがどこに保存されるという決まりはありません。
そういうわけで、自動的に確保される変数も、new で確保される変数も、一般的な意味では、「どこか適切な場所」に確保されます。
さて、new によるオブジェクトの生成は、「動的」というよりも、遅延生成という意味合いが強いわけです。
特に、クラスなどは、生成時にパラメータが必須なケースがあります。new を使わずに、オブジェクトを生成しようとすると、これでは困る場合があります。
たとえば、クラスのメンバーにほかのクラスのインスタンスを持つ場合、そのクラスのインスタンスが生成された時点で、すべてのメンバーが生成される必要があります。
このとき、とりあえず、「ポインタだけ」生成しておいて、その実体は、その後で(パラメータがそろった時点で) new で生成する。
new による生成は、そういう趣が強いわけです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) Pythonのオブジェクトの関数について 2 2023/05/11 19:15
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Visual Basic(VBA) Excel VBAについて、 フォルダ内のファイルを全て開きたい場合、 FSOを使えば、Dirは使わ 1 2023/01/27 13:18
- Visual Basic(VBA) VBA★PDFをPDFアプリで印刷しようと思っていますが上手くゆきません 1 2022/06/06 22:04
- Java 複数TBLのオブジェクトを1つの変数(オブジェクト)でまとめて管理したい 1 2022/12/17 00:12
- その他(プログラミング・Web制作) Pythonのデータ型 2 2023/04/26 12:53
- Windows 10 IT初心者です! powershellで以下のようなエラーが出ました オブジェクト参照がオブジェクト 1 2023/05/17 11:30
- Illustrator(イラストレーター) 【シェイプ形成ツール】でうまく分割できない 1 2022/05/26 10:57
- Visual Basic(VBA) Excel・ユーザーフォームの情報を受け渡したい 4 2022/06/08 10:11
- 日本語 「に」について 9 2022/10/25 16:32
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
newしないインスタンス?実体化しなくてもいいの?
Java
-
char*を初期化したいのですが
C言語・C++・C#
-
C言語で、メモリを解放しないで終わるプログラム
C言語・C++・C#
-
-
4
C言語での引数の省略方法
C言語・C++・C#
-
5
LPSTR型の初期化について
C言語・C++・C#
-
6
クラスのアドレスを引数として渡したい
C言語・C++・C#
-
7
c++,ある関数のクラスから別のクラスの関数を呼ぶ
C言語・C++・C#
-
8
1 つ以上の複数回定義されているシンボルが見つかりました
C言語・C++・C#
-
9
1 つのヘッダファイルに複数のクラスって?
C言語・C++・C#
-
10
C++でCの構造体をnewするとまずいのでしょうか?
C言語・C++・C#
-
11
既定のコンストラクタがない?
C言語・C++・C#
-
12
vectorの中にmap
C言語・C++・C#
-
13
enumの値から定義名を文字列化したい
C言語・C++・C#
-
14
C++言語で、構造体のコピーは可能(しても良い)のでしょうか?
C言語・C++・C#
-
15
new charとnew char[N]の違いは?
C言語・C++・C#
-
16
【C++】関数ポインタの使い方
C言語・C++・C#
-
17
C++のfor文について
C言語・C++・C#
-
18
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
19
構造体のメンバをfor文で回したい
C言語・C++・C#
-
20
LPCWSTRとchar
C言語・C++・C#
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
malloc呼び出し時のセグメンテ...
-
GetCommandLineを使用しました。
-
void*型のデータサイズ
-
プログラムが途中で強制終了し...
-
mallocについて
-
MSDNがgethostbynameではなくge...
-
ヒープメモリの解放について
-
行列積の問題で
-
MFCのCStringについて
-
callocの処理速度
-
配列の添え字の最大数とは?
-
allocってなんですか?
-
行列内の行の交換,列の交換を...
-
ポインタのポインタの初期化法
-
関数から配列を返すには?
-
リッチテキストボックスの中身...
-
クイックソートの比較交換回数...
-
C言語 配列の長さの上限
-
C言語のmemcpy関数について質問...
-
2次元配列を確保したいのですが、
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c言語のポインタへの文字列入力...
-
allocってなんですか?
-
newしないオブジェクトについて
-
mallocについて
-
配列の添え字の最大数とは?
-
ヒープメモリの解放について
-
ビットをローテートするプログ...
-
C++で、メンバもヒープに確保さ...
-
malloc呼び出し時のセグメンテ...
-
プログラムが途中で強制終了し...
-
スタック破壊の上手な見つけ方...
-
指定したメモリアドレスの値の...
-
void*型のデータサイズ
-
ポインタのポインタの初期化法
-
MSDNがgethostbynameではなくge...
-
callocの処理速度
-
free関数で動作が止まる
-
Accessで、メモリを開放するタ...
-
C++のnewで確保したメモリーの...
-
sprintf()の使い方について
おすすめ情報