2

これら2つのステートメントの違いは何ですか?

stringstream *myStream = new stringstream(s);

stringstream myStream(s);  

最初にポインターを返し、「動的に」メモリを割り当てると聞きました。しかし、私はその違いを本当に理解していません。

前もって感謝します

4

4 に答える 4

1

最初にポインターを返し、「動的に」メモリを割り当てると聞きました。しかし、私はその違いを本当に理解していません。

そのとおりです。プログラムで使用できるメモリにはいくつかの種類があります。

  • 静的/グローバルメモリ。コンパイル時に割り当てられ、プログラムの存続期間を通じてその変数に使用されるのと同じアドレス

  • スコープに入ると変数が作成され、スコープを出ると自動的に破棄されるように、関数/スコープに対してローカルなスタックメモリ。スタック ポインターに関連するアドレスはコンパイル時に計算されるため、非常に効率的で高速です。次に例を示します。

    if (int x = f()) std::cout << x; // x は "if" スコープ内のスコープにありますが、この行の後で破棄されます

  • フリーストア (ヒープ) メモリ。動的に割り当てられます。つまり、変数を作成できるメモリのアドレスは実行時に計算され、他のどの動的メモリ要求が既に行われているかによって異なります。deleteこれは、オブジェクトを破棄してメモリの割り当てを解除するためのマッチングが必要であるという点で、比較的遅く、手動です。

于 2013-04-18T05:11:31.423 に答える