1

我有一个类“foo”,它有一个多维数组,需要通过 getArray 成员提供数组的副本。动态创建数组时有没有一种很好的方法,所以我不能将数组传回一个常量,因为数组总是被删除、重新创建等。我想过创建一个新的动态数组来传回它,但这是可以接受,因为调用代码需要知道删除它等等。

4

3 回答 3

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;
   }
};
于 2010-02-22T10:18:23.173 回答
0

对您的问题的简单回答是,这不是一个好的设计,因为它应该是处理数组删除/释放的创建类。

重点是你为什么一直删除/重新创建这个多维数组?你能不创建一个实例,然后在需要时进行修改吗?

就我个人而言,我会按原样返回数组,并对其进行迭代并在循环期间对其进行任何计算/函数,因此通过不创建/删除数组来节省资源。

于 2010-02-22T10:23:14.073 回答
0

尼尔可能是最好的答案。第二个最好的方法是不使用数组。在 C++ 中,当您谈论动态数组时,它的意思是vector.

有两种可能:

  1. 嵌套向量:std::vector<int, std::vector<int> >(10, std::vector<int>(20))
  2. 简单向量:std::vector<int>(200)

两者都会有200项目。第一个显然是多维的,而第二个则留给您计算偏移量的任务。

第二个要求更多的工作,但在内存方面的性能更高,因为分配了一个大块而不是一个指向十个中等块的小块......

但正如尼尔所说,你自己的一个适当的类来定义确切的操作集会更好:)

于 2010-02-22T14:53:47.790 回答