这可能是一个非常新手的问题。我正在处理的类(我们称之为 MyClass)包含以下变量
int nbins;
double * bins; // = new double[nbins+i]
因为我正在实现一个复制构造函数
MyClass( const MyClass& source )
我需要复制source.bins
。我打算使用std::copy
from algorithm
,但我发现的所有示例都显示了如何复制静态数组double bins[] = ...
或标准数据结构,如std::vector
. 我找不到任何std::copy
在指针上使用的示例,例如double * bins = new double[nbins+i]
. 所以,我的问题是:在指针上使用是合法的std::copy
,例如
double * bins = new double[nbins+1]; //is this necessary?
std::copy( std::begin( source.bins ), std::end(source.bins), std::begin(bins) );
还是我应该依赖 Cmemcpy
double * bins = new double[nbins+1]; //again, is this necessary?
memcpy( source.bins, bins, (nbins+1) /* *sizeof(double) ?*/ );
所以,我的问题基本上是两个:
1)std::end(bins)
知道终点在bins (=new double[nbins+1])
哪里吗?
2)在进行复制之前,我是否需要为目标分配内存?或者copy
(or memcpy
) 会解决这个问题?