Accelerated C++ の第 11 章で、著者は、配列を使用して std::vector の動作をエミュレートする Vector クラスを提示しています。これらはアロケータ クラスを使用してメモリ管理を処理します。関数の役割はuncreate
、配列の各要素を破棄し、配列に割り当てられたスペースを解放することです。
template <class T> void Vec<T>::uncreate() {
if (data) {
// destroy (in reverse order) the elements that were constructed
iterator it = avail;
while (it != data)
alloc.destroy(--it);
// return all the space that was allocated
alloc.deallocate(data, limit - data);
}
// reset pointers to indicate that the Vec is empty again
data = limit = avail = 0;
}
明らかに、割り当てられたスペースの割り当てを解除する必要があります。しかし、個々の要素も破壊する必要がある理由はよくわかりません。個々の要素を破壊せずにメモリのみを解放するとどうなるでしょうか?