我有一个类“foo”,它有一个多维数组,需要通过 getArray 成员提供数组的副本。动态创建数组时有没有一种很好的方法,所以我不能将数组传回一个常量,因为数组总是被删除、重新创建等。我想过创建一个新的动态数组来传回它,但这是可以接受,因为调用代码需要知道删除它等等。
问问题
182 次
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
.
有两种可能:
- 嵌套向量:
std::vector<int, std::vector<int> >(10, std::vector<int>(20))
- 简单向量:
std::vector<int>(200)
两者都会有200
项目。第一个显然是多维的,而第二个则留给您计算偏移量的任务。
第二个要求更多的工作,但在内存方面的性能更高,因为分配了一个大块而不是一个指向十个中等块的小块......
但正如尼尔所说,你自己的一个适当的类来定义确切的操作集会更好:)
于 2010-02-22T14:53:47.790 回答