我想确定这没有错:我用
初始化数组 double* lower = input->getLowerBox();
其中函数getLowerBox()返回一些double *。这是对的吗?或者说我用这种方式初始化::
double* lower = new double[nbP];
for (int i=0;i<nbP;i++)
lower[i]=input->getLowerBox()[i];
或避免多次调用getLowerBox,
double* lower = new double[nbP];
double* tmp = input->getLowerBox();
for (int i=0;i<nbP;i++)
lower[i]=tmp[i];
delete[] tmp;
答案 0 :(得分:4)
两步食谱:
Input::getLowerBox()
以返回std::vector<double> const&
const
引用答案 1 :(得分:0)
嗯,这取决于你想做什么。你需要一个新阵列吗?
您的第一个代码段不会创建新阵列,因此内存管理更为重要。
例如:
double* lower = input->getLowerBox();
delete[] lower;
可能会导致input->getLowerBox()
无效。或类似的东西:
double* lower = NULL;
{
Class input;
lower = input->getLowerBox();
}
//...
如果lower
清除析构函数中数组的内容,会使input
成为悬空指针。
最后两个片段创建新数组。它是更安全的IMO,但也使用额外的内存。
两者都是正确的,取决于你想做什么。无论您选择哪种,请务必完整记录。
答案 2 :(得分:0)
第一种方式很好。你将返回一个指向double的指针,我假设它与一个数组相关(如果没有,那么请纠正我)。通过这样做,您指向该数组的第一个元素,然后您可以只索引lower
或使用指针算法来访问其他元素。
getLowerBox()
的定义,以便您更清楚自己要做什么?
答案 3 :(得分:0)
您是否有能力更改getLowerBox()
?如果是这样,我会改变它,以便返回一个向量。
根据实现,它可能会返回一个你可以拥有的指针或一个指向内部静态的指针(坏但可能),所以你需要知道它在做什么,并通过保留指针或获取副本来相应地采取行动。数组分别。
如果您无法控制getLowerBox()
并且您知道它返回的数组的大小,那么将它复制到向量是合理的想法
double* lower = input->getLowerBox();
vector<double> lowerV(lower, lower + N );
(其中N
是数组的大小 - 顺便说一句,这只是来自内存,我还没有编译它。)
答案 4 :(得分:0)
出于多种原因,我肯定会选择第一个。它更干净,它避免了不必要的调用/变量创建等。如果您使用“ - &gt;”,请确保输入是指针;否则使用“。”。