我正在使用一些动态分配的多精度变量数组(来自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;
}
最佳答案
是的,这是必要的。
生活的一般规则在这里适用:
“你应该处置你使用的东西!”
如果不这样做,如果mpc_t
的析构函数包含会产生副作用的代码,则将导致内存泄漏或严重的未定义行为。
动态内存是一项功能,可为您的程序提供显式的内存管理,如果使用它(调用new
或new []
),则有责任确保其正确使用(通过调用delete
或)。
请注意,最好使用自动/局部变量而不是动态指针。
并且,如果必须,则应使用smart pointers而不是原始指针。它们为您提供了动态内存的优势,减去了显式的内存管理开销。