C ++でのベクトルの静的割り当てと動的割り当ての違いは何ですか?

Ajaychhimpa1

私は次の場合の違いを知っています:

case 1: int a[10];

ケース1の場合、配列のメモリはスタックに割り当てられます。

case 2: int *a = new int[10];

ケース2の場合、メモリはヒープに割り当てられ、ポインタが返されます。

しかし、ベクトルメモリは常にヒープに割り当てられるため、以下の2つの宣言の違いは何ですか?

vector<int> v1;
vector<int> *v2 = new vector<int>();
リチャードチェンバーズ

次の2つのステートメントは作成しますvector<>が、2つの間にいくつかの違いがあります。

vector<int> v1;
vector<int> *v2 = new vector<int>();

まず、実際のベクターデータストレージは、ヒープまたは指定されたメモリアロケーターが使用するソースから割り当てられます(std :: vectorどこでメモリを割り当てますか?を参照)。これは両方で同じです。

2つの違いは、(1)vector<>管理データが格納される場所と、vector<>およびその割り当てられたメモリの有効期間です

最初のケースでは、vector<>管理データはローカルメモリ、スタックに格納され、vector<>変数がスコープ外になると、デストラクタが呼び出されて、ヒープ上のベクトルデータストレージスペースとスタック上のベクトル管理スペースが削除されます。最初のケースでは、vector<>変数がスコープ外になると、vector<>メモリが適切に解放されます。

2番目のケースでは、vector<>ストレージデータスペースとvector<>管理スペースの両方がヒープ上にあります。

したがって、のアドレスを含むポインタ変数vector<>がスコープ外になると、vector<>それ自体のデストラクタは呼び出されません。その結果、のデータストレージ領域vector<>と管理ストレージ領域の両方に割り当てられたメモリをクリーンアップして解放するデストラクタが呼び出されないため、メモリは回復されません

vector<>適切にクリーンアップされていることを確認する2番目のケースの1つの可能性は、スマートポインターを使用することです。これは、スコープ外になると、ポイントされたもののデストラクタもトリガーします。

ほとんどの場合、newを作成するために使用する2番目のケースが必要になることvector<>はまれであり、最初のケースが最も一般的であるだけでなく、より安全です。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

C ++では、配列割り当てのnewとnew []の違いは何ですか

分類Dev

cとc ++の動的メモリ割り当てとヒープの違いは何ですか

分類Dev

C ++スタイルとガベージコレクターでのメモリの割り当て解除の違いは何ですか?

分類Dev

Cのポインタへの割り当ての違いは何ですか?

分類Dev

Cのグローバル変数と動的に割り当てられたv変数の違いは何ですか?

分類Dev

C ++ベクトルでのpush_backとoperator []の割り当て

分類Dev

Cでの動的メモリ割り当てと静的/自動メモリ割り当て

分類Dev

C#での静的リストの割り当てはアトミックです

分類Dev

C ++でベクトルを動的に割り当てる安全な方法は何ですか

分類Dev

BMI計算機の割り当て。c#。私は何が間違っているのですか?

分類Dev

C ++では、単一のクラスを動的に割り当てるための最良の方法は何ですか?

分類Dev

Cでの静的メモリ割り当てと動的メモリ割り当てのコスト

分類Dev

C、マトリックスの動的割り当て:これが許可されないのはなぜですか?

分類Dev

C ++での動的割り当て配列の違い

分類Dev

C ++では何が速いですか?数学の計算または割り当て?

分類Dev

宣言された配列に値を割り当てることと、C#で配列を作成して初期化することの違いは何ですか?

分類Dev

Cのポインタ変数への変数のアドレスの参照解除と割り当ての違いは何ですか?

分類Dev

C ++ベクトルの動的メモリの割り当て解除/削除

分類Dev

C ++-初期化での静的割り当て

分類Dev

O(1)時間でC ++ベクトルに新しい値を割り当てることは可能ですか?

分類Dev

C ++で2Dベクトルの要素に値を割り当てる方法は?

分類Dev

このC文字列の割り当てが違法なのはなぜですか?

分類Dev

C ++コンパイラがこの条件付きブール割り当てを無条件割り当てとして最適化しないのはなぜですか?

分類Dev

C ++コンパイラがこの条件付きブール割り当てを無条件割り当てとして最適化しないのはなぜですか?

分類Dev

c()とas.vectorを使用してベクトルを作成することの違いは何ですか?

分類Dev

Visual Studio C ++では、メモリ割り当ての表現は何ですか?

分類Dev

Visual Studio C ++では、メモリ割り当ての表現は何ですか?

分類Dev

Cでメモリの割り当てを解除する必要は何ですか?

分類Dev

C ++でのオブジェクトの配列の静的メモリ割り当て

Related 関連記事

  1. 1

    C ++では、配列割り当てのnewとnew []の違いは何ですか

  2. 2

    cとc ++の動的メモリ割り当てとヒープの違いは何ですか

  3. 3

    C ++スタイルとガベージコレクターでのメモリの割り当て解除の違いは何ですか?

  4. 4

    Cのポインタへの割り当ての違いは何ですか?

  5. 5

    Cのグローバル変数と動的に割り当てられたv変数の違いは何ですか?

  6. 6

    C ++ベクトルでのpush_backとoperator []の割り当て

  7. 7

    Cでの動的メモリ割り当てと静的/自動メモリ割り当て

  8. 8

    C#での静的リストの割り当てはアトミックです

  9. 9

    C ++でベクトルを動的に割り当てる安全な方法は何ですか

  10. 10

    BMI計算機の割り当て。c#。私は何が間違っているのですか?

  11. 11

    C ++では、単一のクラスを動的に割り当てるための最良の方法は何ですか?

  12. 12

    Cでの静的メモリ割り当てと動的メモリ割り当てのコスト

  13. 13

    C、マトリックスの動的割り当て:これが許可されないのはなぜですか?

  14. 14

    C ++での動的割り当て配列の違い

  15. 15

    C ++では何が速いですか?数学の計算または割り当て?

  16. 16

    宣言された配列に値を割り当てることと、C#で配列を作成して初期化することの違いは何ですか?

  17. 17

    Cのポインタ変数への変数のアドレスの参照解除と割り当ての違いは何ですか?

  18. 18

    C ++ベクトルの動的メモリの割り当て解除/削除

  19. 19

    C ++-初期化での静的割り当て

  20. 20

    O(1)時間でC ++ベクトルに新しい値を割り当てることは可能ですか?

  21. 21

    C ++で2Dベクトルの要素に値を割り当てる方法は?

  22. 22

    このC文字列の割り当てが違法なのはなぜですか?

  23. 23

    C ++コンパイラがこの条件付きブール割り当てを無条件割り当てとして最適化しないのはなぜですか?

  24. 24

    C ++コンパイラがこの条件付きブール割り当てを無条件割り当てとして最適化しないのはなぜですか?

  25. 25

    c()とas.vectorを使用してベクトルを作成することの違いは何ですか?

  26. 26

    Visual Studio C ++では、メモリ割り当ての表現は何ですか?

  27. 27

    Visual Studio C ++では、メモリ割り当ての表現は何ですか?

  28. 28

    Cでメモリの割り当てを解除する必要は何ですか?

  29. 29

    C ++でのオブジェクトの配列の静的メモリ割り当て

ホットタグ

アーカイブ