No.3
- 回答日時:
静的というのは通常、グローバルなオブジェクトとstatic宣言されたオブジェクトを指すようです。
これらは静的領域という、ヒープでもスタックでもないメモリ領域に確保されます。ちなみにCでは一般的に、プログラム領域、静的領域、スタック領域、ヒープ領域と、4つの領域がメモリ上のどこかに確保されます。
>では、newしない場合、静的ということになるのでしょうか?
>そうだとすると、静的なオブジェクトとは一体どのようなものをいうのでしょうか?
以上の事から、newをしない変数は静的かローカルな変数ということになります。
静的なオブジェクトとは静的領域に確保されるものをいいます。
No.2
- 回答日時:
C++の規格というレベルでは、どのオブジェクトがどこに保存されるという決まりはありません。
そういうわけで、自動的に確保される変数も、new で確保される変数も、一般的な意味では、「どこか適切な場所」に確保されます。
さて、new によるオブジェクトの生成は、「動的」というよりも、遅延生成という意味合いが強いわけです。
特に、クラスなどは、生成時にパラメータが必須なケースがあります。new を使わずに、オブジェクトを生成しようとすると、これでは困る場合があります。
たとえば、クラスのメンバーにほかのクラスのインスタンスを持つ場合、そのクラスのインスタンスが生成された時点で、すべてのメンバーが生成される必要があります。
このとき、とりあえず、「ポインタだけ」生成しておいて、その実体は、その後で(パラメータがそろった時点で) new で生成する。
new による生成は、そういう趣が強いわけです。
No.1ベストアンサー
- 回答日時:
静的、動的という認識を改めるべきです。
メモリにはスタック領域とヒープ領域というのがあり、
newによって獲得されたメモリはヒープ領域に格納されます。
これはプログラマが明示的でdeleteしないと削除されません。
一方、関数の中で int a = 0、などと宣言して使うローカル変数の場合、
これはプログラムの方で自動的にメモリを獲得します。
このメモリはスタック領域に格納されています。
関数を抜ける際に自動的にメモリを開放します。
newによるメモリ獲得はプログラマが
明示的に獲得、開放をしなければならないが、
関数で上記のローカル変数のように使われるものは
プログラムが自動的に獲得・開放を行ってくれます。
静的→暗黙的、動的→明示的 と言い換える方が
しっくりくるのではないでしょうか。
参考URL:http://fox.flop.jp/wiki/wiki.cgi?page=%A5%B9%A5% …
お探しの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#
-
C++でCの構造体をnewするとまずいのでしょうか?
C言語・C++・C#
-
newしないインスタンス?実体化しなくてもいいの?
Java
-
-
4
char*を初期化したいのですが
C言語・C++・C#
-
5
1 つのヘッダファイルに複数のクラスって?
C言語・C++・C#
-
6
C++言語で、構造体のコピーは可能(しても良い)のでしょうか?
C言語・C++・C#
-
7
「クラス関数」「メンバ関数」「メソッド」の違いを教えてください。
PHP
-
8
1 つ以上の複数回定義されているシンボルが見つかりました
C言語・C++・C#
-
9
deleteで開放するとエラーになる原因がわからない
C言語・C++・C#
-
10
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
11
C言語で、メモリを解放しないで終わるプログラム
C言語・C++・C#
-
12
C言語の配列をC++のvectorに高速に変換したい
C言語・C++・C#
-
13
C++:構造体:newで入れ子:deleteは?
C言語・C++・C#
-
14
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
15
C++にてtemplateで受け取った任意の型の変数が何型であるかを判定したい
C言語・C++・C#
-
16
参照型で受け取った引数をポインター型に渡す方法
C言語・C++・C#
-
17
C++でfriendクラスにしているのにprivateメンバにアクセスできない
C言語・C++・C#
-
18
配列の要素数に変数を入れたいときには
C言語・C++・C#
-
19
クラスのアドレスを引数として渡したい
C言語・C++・C#
-
20
C言語でヘッダファイルにグローバル変数を宣言する
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
mallocについて
-
newしないオブジェクトについて
-
allocってなんですか?
-
stringの最大サイズ
-
ビットをローテートするプログ...
-
C言語 mallocとfreeについて
-
アンマネージド関数でのメモリ...
-
Win32APIでのメモリ管理について
-
C言語に関する質問
-
アセンブラでのメモリの動的確...
-
ヒープメモリの解放について
-
メモリの動的確保(大容量)に...
-
プログラムが途中で強制終了し...
-
64ビットと32ビットの違い
-
VC++6.0 MFC ダイアログバーを...
-
ExcelVBAで質問です。離れた二...
-
c言語
-
C言語 配列の長さの上限
-
パイソンの
-
_tcscpy_s(wcscpy_s)の第二引数...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
mallocについて
-
c言語のポインタへの文字列入力...
-
allocってなんですか?
-
newしないオブジェクトについて
-
ヒープメモリの解放について
-
C++で、メンバもヒープに確保さ...
-
MSDNがgethostbynameではなくge...
-
プログラムが途中で強制終了し...
-
配列の添え字の最大数とは?
-
Accessで、メモリを開放するタ...
-
malloc呼び出し時のセグメンテ...
-
ヒープ領域の限界値設定
-
スタック破壊の上手な見つけ方...
-
C言語 mallocとfreeについて
-
指定したメモリアドレスの値の...
-
stringの最大サイズ
-
16進ダンプのプログラム
-
入れ子になった構造体について
-
64ビットと32ビットの違い
-
free関数で動作が止まる
おすすめ情報