これはおそらく非常に初心者の質問です。私が取り組んでいるクラス (MyClass と呼びましょう) には、次の変数が含まれています。
int nbins;
double * bins; // = new double[nbins+i]
コピーコンストラクタを実装しているので
MyClass( const MyClass& source )
をコピーする必要がありますsource.bins。std::copyfromを使用するつもりでした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)がそれを処理しますか?