0

我使用多倍變量(從MPC庫)的一些動態分配數組,不知道是否是既要清除的變量和刪除陣列,以避免內存泄漏等?換句話說,下面的代碼片段中的所有內務都是必要的嗎?清理和刪除多倍變量

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; 
} 

回答

1

是的,這是必要的。

生活的一般規則適用於這裏:

「你應該配置你使用什麼!」

如果沒有它會導致內存泄漏或更糟糕的未定義行爲如果mpc_t析構函數中含有產生副作用的代碼。

動態內存是它爲您提供了明確的內存管理程序的功能,如果你使用它(調用newnew []),那麼它是你的責任釋放它通過調用deletedelete [],以確保其正常使用(分別爲)。

請注意,您更好地使用自動/本地變量而不是動態指針。
如果您必須,您應該使用smart pointers而不是原始指針。它們爲您提供了動態內存的優勢,減少了顯式內存管理開銷。

+0

這使事情更清晰。謝謝! – jorgen