Передача многомерного массива обратно через члены доступа
У меня есть класс "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
,
Есть две возможности:
- вложенные векторы:
std::vector<int, std::vector<int> >(10, std::vector<int>(20))
- простой вектор:
std::vector<int>(200)
У обоих будет 200
Предметы. Первый явно многомерен, а второй оставляет вам задачу вычисления смещений.
Второй запрос на дополнительную работу, но более производительный с точки зрения памяти, так как выделяется один большой кусок вместо одного маленького, указывающего на десять средних...
Но, как сказал Нейл, лучше использовать собственный класс для точного определения набора операций:)
Простой ответ на ваш вопрос заключается в том, что это не очень хороший дизайн, так как это должен быть создающий класс, который должен обрабатывать удаление / освобождение массива.
Главное, почему вы продолжаете удалять / воссоздавать этот многомерный массив? Разве вы не можете создать один экземпляр, а затем просто изменить, когда это будет необходимо?
Лично я бы возвращал массив как есть, итерировал бы по нему и выполнял любые вычисления / функции на нем во время цикла, поэтому экономя ресурсы, не создавая / удаляя массив.