我有一个类“foo”,它有一个多维数组,需要通过getArray成员提供数组的副本。在动态创建数组时有没有一种很好的方法可以执行此操作,因此我无法将数组传递回const,因为数组总是被删除,重新创建等等。我想创建一个新的动态数组来传回它,但这是可以接受,因为调用代码需要知道删除这个等。
答案 0 :(得分: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;
}
};
答案 1 :(得分:0)
对你的问题的简单回答是,这不是一个好的设计,因为它应该是应该处理数组删除/释放的创建类。
重点是为什么要继续删除/重新创建这个多维数组?你能不创建一个实例,然后在需要时进行修改?
就个人而言,我会按原样返回数组,然后迭代它并在循环期间对其进行任何计算/函数,从而通过不创建/删除数组来节省资源。
答案 2 :(得分:0)
尼尔可能是最好的答案。第二好的不是使用数组。在C ++中,当你谈到动态数组时,它意味着vector
。
有两种可能性:
std::vector<int, std::vector<int> >(10, std::vector<int>(20))
std::vector<int>(200)
两者都有200
个项目。第一个显然是多维的,而第二个则让你完成计算偏移的任务。
第二个要求更多的工作,但是更好地执行记忆,因为分配了一个大块而不是一个指向十个中等块的小块...
但是正如Neil所说,你自己定义一组确切的操作更合适一类:)