在《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;
}
显然我们需要释放分配的空间。但我不清楚为什么我们还需要销毁每个元素。如果我们只释放内存而不销毁单个元素会发生什么?