Передача многомерного массива обратно через члены доступа

У меня есть класс "foo", который имеет многомерный массив и должен предоставить копию массива через член getArray. Есть ли хороший способ сделать это, когда массив создается динамически, поэтому я не могу передать массив обратно const, так как массив всегда удаляется, воссоздается и т. Д. Я думал о создании нового динамического массива, чтобы передать его обратно, но это приемлемо, так как необходимо знать код вызова, чтобы удалить это и т.д.

3 ответа

Вернуть объект, а не голый массив. Объект может иметь конструктор копирования, деструктор и т. Д., Который будет выполнять копирование, удаление и т. Д. Для пользователя.

class Matrix {
   // handle creation and access to your multidim array
   // including copying, deletion etc.
};

class A {    // your class
   Matrix m;     // the classes matrix
   Matrix getArray() {
       return m;
   }
};

Нил, наверное, лучший ответ. Вторым лучшим будет не использовать массив. В C++, когда вы говорите о динамическом массиве, это означает vector,

Есть две возможности:

  1. вложенные векторы: std::vector<int, std::vector<int> >(10, std::vector<int>(20))
  2. простой вектор: std::vector<int>(200)

У обоих будет 200 Предметы. Первый явно многомерен, а второй оставляет вам задачу вычисления смещений.

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

Но, как сказал Нейл, лучше использовать собственный класс для точного определения набора операций:)

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

Главное, почему вы продолжаете удалять / воссоздавать этот многомерный массив? Разве вы не можете создать один экземпляр, а затем просто изменить, когда это будет необходимо?

Лично я бы возвращал массив как есть, итерировал бы по нему и выполнял любые вычисления / функции на нем во время цикла, поэтому экономя ресурсы, не создавая / удаляя массив.

Другие вопросы по тегам