Я использую некоторые динамически распределяемые массивы переменных multiprecision (из библиотеки 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;
}
Да, это необходимо.
Общее правило жизни применяется здесь:
«Вы должны распоряжаться тем, что вы используете!»
Если вы этого не сделаете, это приведет к утечке памяти или гораздо хуже неопределенного поведения, если деструктор mpc_t
содержит код, который производит побочные эффекты.
Динамическая память — это функция, которая обеспечивает явное управление памятью для вашей программы и, если вы ее используете (призвание new
или же new []
) тогда вы несете ответственность за обеспечение его надлежащего использования (освободить его, позвонив delete
или же delete []
соответственно).
Обратите внимание, что вам гораздо лучше использовать авто / локальные переменные вместо динамических указателей.
И если вам нужно, вы должны использовать умные указатели вместо сырых указателей. Они предоставляют вам преимущества динамической памяти без явных накладных расходов на управление памятью.
Других решений пока нет …