template <typename T>
class dvec {
size_t n = 0;
size_t capacity = 0;
T* data = nullptr;
public:
dvec() {
recapacity(21);
}
virtual ~dvec() {
if (data != nullptr) {
delete[] data;
data = nullptr;
}
}
T& operator [] (size_t k) {
if (k < n)
return data[k];
throw "Index out of range";
}
void recapacity(size_t k = capacity) {
capacity = k;
const size_t bytes = sizeof(T) * capacity;
T* newData = static_cast<T*>(::operator new(bytes));
memcpy(newData, data, sizeof(T) * n);
if (data != nullptr)
delete[] data;
data = newData;
}
void resize(size_t k, T init = T()) {
if (k > capacity)
recapacity(2 * k);
for (size_t i = n; i < k; i++)
data[i] = init;
n = k;
}
void push_back(const T& a) {
resize(n + 1);
data[n - 1] = a;
}
};
I want to make some custom vector but current my vector doesn't work in vector scoped vector. This throw error when delete (going out scorp) I guess first inside vector delete so outside vector can't delete spaces that have been deleted.