-2

私は Java の経験が増え、現在 C++ の世界に飛び込んでいるので、Java について知っていることで、C++ のように機能するかどうか確信が持てません。

実際に、この疑似 C++ コードを取得しました。

unsigned long __stdcall MyFunction()
   {
    //Do some code that will take a while to complete...

       {
            MY_BIG_STRUCT mbStruct = {};
            mbStruct.a = "a";
            [...];
            UseMyStructData(&mbStruct);
        }

    //Do some code that will take a while to complete...

    return EXIT_SUCCESS;
}

したがって、私の質問は次のとおりです。JAVAでは、括弧内のコードブロックを使用する{}と、それらの変数を「解放」としてマークし、関数が実行を終了していなくても、それらの変数をGC解放します。では、C++ でもこれは同じように機能しますか? {}または、ブロック ステートメントがない場合 (if、while、switch など)を使用しても無駄ですか?

よろしくお願いします、

アフォンソ・ラージ。

4

4 に答える 4

1

スタックに割り当てられた自動変数は割り当て解除されます。これは、Java のガベージ コレクターとは異なります。これは、ヒープの割り当てではなく、スタックの自動割り当てであるためです。使用法に関しては、あなたには同じように見えます。

ヒープから何かを割り当てる場合 ( new/を使用malloc) - 自分自身の割り当てを解除する必要があります ( delete/を使用free)。そのためには、 unique_ptrまたはshared_ptrを使用します。

于 2013-10-13T20:39:10.327 に答える
0

C++ でも同様に機能します。あなたMY_BIG_STRUCTはブロックの終わりに解放されます。

于 2013-10-13T20:38:45.053 に答える