【发布时间】:2019-02-25 10:41:27
【问题描述】:
我正在阅读该语言作者的《Programming Principle and Practices using C++》一书。
我正在阅读本书主要描述如何实现 std::vector 的部分。这是书中的一段代码:
template<typename T, typename A = std::allocator<T>> class vector {
A alloc;
int space, size;
T* elem;
//...some code
reserve(int newalloc) {
if (newalloc <= space) return; // never decrease allocation
T* p = alloc.allocate(newalloc); // allocate new space
for (int i = 0; i < sz; ++i) alloc.construct(&p[i], elem[i]); // copy
for (int i = 0; i < sz; ++i) alloc.destroy(&elem[i]); // destroy
alloc.deallocate(elem, space); // deallocate old space
elem = p;
space = newalloc;
}
};
书中提到我们必须使用std::allocator,因为vector的数据结构是由一些初始化的数据和一些未初始化的数据组成的。
我不清楚这意味着什么。如果我使用 new 和 delete 会出现什么问题?
template<typename T> class vector2 {
A alloc;
int space, size;
T* elem;
//some code
reserve(int newalloc) {
if (newalloc <= space) return;
T* p = new T[newallow];
for (int i = 0; i < sz; ++i) p[i] = elem[i];
delete[] elem;
elem = p;
space = newalloc;
}
};
【问题讨论】:
标签: c++