array<T>& operator=(array<T> &b) {
if (a != NULL) delete[] a;
a = b.a;
b.a = NULL;
length = b.length;
return *this;
}
のように,代入演算子「=」を定義している.これは,
オリジナル版では,「array<T> 型のa, b の間で,
a = b;を実行すると,bの内容を破壊する」代入の意味を変更した上で使っている.
C++11 以降で導入された shared_ptr を用いれば,array の代入を要素数によらずに定数時間でおこなうように実現することもできるし,自己参照をおこなう場合を除けばメモリ領域の回収も可能ではあるが,本講義で使う修正版ではC++で一般的に用いられている
a.swap(b);のように,「a と b の中身を交換する」操作を基本的に使う方法を用いた.これに関しては pull request を送ってはいるが,本家では採用されていない .