0

(mpc-libraryから)動的に割り当てられた多倍長変数の配列を使用していますが、メモリリークなどを回避するために、変数をクリアすることと配列を削除することの両方が必要かどうか疑問に思いますか?言い換えれば、以下のスニペットのすべてのハウスキーピングは必要ですか?

using namespace std;
#include <gmp.h>
#include <mpfr.h>
#include <mpc.h>

int main() {

    int i;
    mpc_t *mpcarray;
    mpcarray=new mpc_t[3];
    for(i=0;i<3;i++) mpc_init2(mpcarray[i], 64);

    // Manipulations

    for(i=0;i<3;i++) mpc_clear(mpcarray[i]);
    delete [] mpcarray;

    return 0;
}
4

1 に答える 1

2

はい、必要です。

ここでは、一般的な生活のルールが適用されます。

「使用したものは処分する必要があります!」

mpc_tそうしないと、メモリリークが発生したり、のデストラクタに副作用を引き起こすコードが含まれている場合に未定義動作が発生したりします。

動的メモリは、プログラムの明示的なメモリ管理を提供する機能であり、それを使用する場合(またはを呼び出すnewnew [])、その適切な使用法を確認するのはユーザーの責任です(またはを呼び出すことによって割り当てを解除します)deletedelete []

動的ポインタの代わりに自動/ローカル変数を使用する方がはるかに優れていることに注意してください。
また、必要に応じて、生のポインターの代わりにスマートポインターを使用する必要があります。これらは、動的メモリから明示的なメモリ管理のオーバーヘッドを差し引いた利点を提供します。

于 2013-01-11T15:32:07.587 に答える