1

我想确定这没有错:我用初始化数组

 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;
4

5 回答 5

4

两步食谱:

  1. 改变Input::getLowerBox()返回std::vector<double> const&
  2. 如果要修改返回值,请使用副本,并const改为使用引用
于 2012-04-24T14:21:10.910 回答
0

嗯,这取决于你想做什么。你是否需要一个新的数组。

您的第一个片段不会创建新数组,因此内存管理更为重要。

例如:

double* lower = input->getLowerBox();
delete[] lower;

可能会导致input->getLowerBox()无效。或类似的东西:

double* lower = NULL;
{
   Class input;
   lower = input->getLowerBox();
}
//...

如果清除析构函数中数组的内容,则会产生lower一个悬空指针。input

最后两个片段创建新数组。它更安全 IMO,但也使用额外的内存。

两者都是正确的,这取决于您要做什么。无论您选择哪种方式,请务必完整记录。

于 2012-04-24T14:16:47.027 回答
0

第一种方法很好。您将返回一个指向双精度的指针,我假设它与一个数组有关(如果不是,请纠正我)。通过这样做,您将指向该数组的第一个元素,然后您可以索引lower或使用指针算法来访问其他元素。

编辑:您能否发布定义,getLowerBox()以便更清楚您要做什么?

于 2012-04-24T14:17:14.387 回答
0

你有能力改变getLowerBox()吗?如果是这样,我会改变它,让它返回一个向量。

根据实现,它可能会返回您可以拥有的指针或指向内部静态的指针(不好但可能),因此您需要知道它在做什么,并通过分别保留指针或获取数组的副本来采取相应的行动.

如果您无法控制getLowerBox()并且知道它返回的数组的大小,则将其复制到向量中是一个合理的想法

double* lower = input->getLowerBox(); 
vector<double> lowerV(lower, lower + N );

N数组的大小在哪里 - 顺便说一句,这只是来自内存,我还没有编译它。)

于 2012-04-24T14:34:45.160 回答
0

出于多种原因,我肯定会选择第一个。它更干净,它避免了不必要的调用/变量创建等。如果您使用“->”,请确保输入是一个指针;否则使用“.”。

于 2012-04-24T14:46:44.657 回答