2

基本的には通常の配列ラッパーである次のクラスがあるとします。

 template<class T>
 SimpleArray {
   T * array;
   SimpleArray(): T(NULL) {}
   SimpleArray(T * array_) {
     // what goes here?
   }
   // TODO: copy constructor and copy assignment
   ~SimpleArray() {
     delete[] array;
   }
 };

ある配列から別の配列に要素をコピーするにはどうすればよいですか? 単純なタイプであれば、 のようなものを使用するmemcpyだけで問題なく動作します。しかし、Tディープ コピーが必要な複合型の場合はどうなるでしょうか。たとえば、Tメンバー配列がある場合、浅いコピーよりもT、同じリソースを指す複数のオブジェクトが作成され、これは惨事です。

基本的に、配列のディープ コピーを作成する方法が必要です。助言がありますか?

標準ライブラリの何かを使用できることはわかっていますが、使用しないのには理由があります。SimpleArrayの形式でオブジェクトの内部ストレージに簡単にアクセスできるように設計されていますT*。私に関する限り、そのような機能をサポートする STL コンテナはありません。

4

1 に答える 1

1

独自の動的配列をローリングすることはお勧めできません。T* を介して基になるデータにアクセスするだけでよい場合は、vec.data() (c++11 のみ) または &vec.front() を使用できます。

于 2014-01-01T04:02:32.620 に答える