最初の問題は、これが単純なタイプ(PODを読み取る)でのみ機能することです。
コンストラクタ/デストラクタを使用するものはすべて、それらを呼び出す必要があります。
第二に、これは例外安全ではありません。
それは基本的な保証さえ提供しません。
オブジェクトを変更する前に、すべての例外の安全でない作業を行う必要があります。これは、オブジェクトを変更する前に(そして、間違いなくフリーの前に)実行する必要があることを意味しますnew
。そうしないと、オブジェクトを無効な状態のままにしてスローする可能性があります(これは悪くないように見えるかもしれませんが、例外をキャッチして続行すると、解放されたメモリへのポインタを含むオブジェクトができます)。
ですから、あなたが使ったとしても、あなたはstd::copy()
まだ間違ったことをしているのです。
個人的には、std :: copy()の提案は赤いニシンだと思います。それはデータを正しくコピーしますが、あなたはまだあなたのメソッドをひどく書いています。コピーとスワップのイディウムにひねりを加える必要があります。
template <typename T>
void Vector<T> :: assign(T *start, T *end)
{
Vector<T> tmp(start, end); // construct a temp object that allocates the memory.
swap(tmp); // Swap the current object and the tmp objects data.
// When the tmp object goes out of scope it will delete
// what was the current objects data
}