очистка и удаление переменных мультиточности

Я использую некоторые динамически распределяемые массивы переменных 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;
}

0

Решение

Да, это необходимо.

Общее правило жизни применяется здесь:

«Вы должны распоряжаться тем, что вы используете!»

Если вы этого не сделаете, это приведет к утечке памяти или гораздо хуже неопределенного поведения, если деструктор mpc_t содержит код, который производит побочные эффекты.

Динамическая память — это функция, которая обеспечивает явное управление памятью для вашей программы и, если вы ее используете (призвание new или же new []) тогда вы несете ответственность за обеспечение его надлежащего использования (освободить его, позвонив delete или же delete [] соответственно).

Обратите внимание, что вам гораздо лучше использовать авто / локальные переменные вместо динамических указателей.
И если вам нужно, вы должны использовать умные указатели вместо сырых указателей. Они предоставляют вам преимущества динамической памяти без явных накладных расходов на управление памятью.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]