これはおそらく非常に初心者の質問です。私が取り組んでいるクラス (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) );
または私はむしろCに頼るべきですかmemcpy
double * bins = new double[nbins+1]; //again, is this necessary?
memcpy( source.bins, bins, (nbins+1) /* *sizeof(double) ?*/ );
だから、私の質問は基本的に2つです:
1)std::end(bins)
の終わりがどこにあるか知っていますbins (=new double[nbins+1])
か?
2) コピーを行う前にコピー先にメモリを割り当てる必要がありますか? または、copy
(またはmemcpy
)がそれを処理しますか?