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で質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・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も見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
c++,ある関数のクラスから別のクラスの関数を呼ぶ
C言語・C++・C#
-
newしないインスタンス?実体化しなくてもいいの?
Java
-
C++言語で、構造体のコピーは可能(しても良い)のでしょうか?
C言語・C++・C#
-
-
4
C++でCの構造体をnewするとまずいのでしょうか?
C言語・C++・C#
-
5
char*を初期化したいのですが
C言語・C++・C#
-
6
「クラス関数」「メンバ関数」「メソッド」の違いを教えてください。
PHP
-
7
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
8
1 つ以上の複数回定義されているシンボルが見つかりました
C言語・C++・C#
-
9
deleteで開放するとエラーになる原因がわからない
C言語・C++・C#
-
10
1 つのヘッダファイルに複数のクラスって?
C言語・C++・C#
-
11
クラスのアドレスを引数として渡したい
C言語・C++・C#
-
12
unsigned char配列への入力の仕方
C言語・C++・C#
-
13
C言語で、メモリを解放しないで終わるプログラム
C言語・C++・C#
-
14
C++:構造体:newで入れ子:deleteは?
C言語・C++・C#
-
15
関数の実体定義にヘッダファイルの2重定義防止方法が効かない?
C言語・C++・C#
-
16
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
17
C言語の配列をC++のvectorに高速に変換したい
C言語・C++・C#
-
18
参照型で受け取った引数をポインター型に渡す方法
C言語・C++・C#
-
19
【C#/Java?】try-catchでcatchせずにfinallyは一般的?
その他(プログラミング・Web制作)
-
20
0xffffとは?
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
mallocについて
-
c言語のポインタへの文字列入力...
-
ヒープメモリの解放について
-
構造体でchar name[]と*nameの...
-
指定したメモリアドレスの値の...
-
メモリリークについて
-
配列の添え字の最大数とは?
-
C言語に関する質問
-
malloc(0)でNULLが返された
-
C++で、メンバもヒープに確保さ...
-
MSDNがgethostbynameではなくge...
-
newしないオブジェクトについて
-
CreateFileMapping について
-
構造体を使ったファイルの読み込み
-
stringの最大サイズ
-
ヒープ領域の限界値設定
-
【VC++6.0(MFC)】メモリの静的...
-
LPTSTR型の変数に文字を格納
-
malloc関数によるメモリの確保
-
Accessで、メモリを開放するタ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
newしないオブジェクトについて
-
allocってなんですか?
-
スタック破壊の上手な見つけ方...
-
ヒープメモリの解放について
-
配列の添え字の最大数とは?
-
void*型のデータサイズ
-
c言語のポインタへの文字列入力...
-
DLLのマルチスレッドの動作につ...
-
C++で、メンバもヒープに確保さ...
-
指定したメモリアドレスの値の...
-
win32APIのHeapAlloc()の使い方...
-
ポインタのポインタの初期化法
-
プログラムが途中で強制終了し...
-
大容量の静的な確保の限界値
-
malloc呼び出し時のセグメンテ...
-
ヒープ領域の限界値設定
-
free関数で動作が止まる
-
stringの最大サイズ
-
64ビットと32ビットの違い
-
LPWSTRのコピー
おすすめ情報