Удаляет ли собственная матрица динамически выделяемые данные по истечении срока службы?

#c #memory-leaks #eigen #delete-operator #eigen3

#c #утечки памяти #eigen #удалить-оператор #eigen3

Вопрос:

Пожалуйста, рассмотрите процедуру в следующем фрагменте. Сначала динамически создайте данные, а затем создайте собственную матрицу, используя эти данные. В этом случае матрица освободит память о data том, когда закончится ее жизненный цикл?

Я предполагаю, что в ходе Eigen::Map операции указатель копируется, а фактические элементы data не копируются. Таким образом, мы надеемся, что matrix освободит память data .

 #include<Eigen/Core>
using namespace Eigen;
int main(){
  double* data = new double [6];
  double* itr = data;
  for(int i=0; i<6; i  ){
    *(itr  ) = i;
  }
  auto m = Map<MatrixXd>(data, 2, 3);
}
 

Комментарии:

1. Откуда Map известно, что вы использовали new[] для выделения данных? Что, если бы это был просто простой массив double ? Если в документации не указано, что вы должны использовать new[] для выделения данных, всегда считайте, что вызов является вашей обязанностью delete[] .

Ответ №1:

Матрица не освободит память по data истечении срока службы.

Для Eigen нет никакого способа угадать, где находится ваш указатель (стек / куча или где угодно), и как он выделяется.