ошибка двойного освобождения или повреждения (fasttop).деконструктор для пользовательского класса векторов
Я работаю над созданием класса векторов с нуля и смущен с помощью деконструктора.
класс является:
template <class T>
class Vector
{
public:
typedef T * iterator; //pointer to type T
Vector();
~Vector();
void reserve(unsigned int capacity);
void resize(unsigned int size);
private:
unsigned int my_size;
unsigned int my_capacity;
T * buffer;
};
template <class T>
Vector<T>::Vector()
{
my_size = 0;
my_capacity = 0;
buffer = 0;
}
template <class T>
Vector<T>::~Vector(){
delete [] buffer;
my_size = my_capacity = 0;
}
template <class T>
void Vector<T>::reserve(unsigned int new_capacity){
int * new_buffer = new T[new_capacity];
for(int i=0; i<my_size;i++){
new_buffer[i] = buffer[i];
}
my_size += new_capacity;
my_capacity += new_capacity;
buffer = new_buffer;
delete new_buffer;
}
template <class T>
void Vector<T>::resize(unsigned int new_size){
//if new_size < size, change size.
if(new_size < size)
{
size = new_size;
} else {
if(new_size > my_capacity){ //increase capacity for larget size
while(my_capacity < new_size){
reserve(my_capacity+5);
}
}
for(int i = my_size; i < new_size; i++){
buffer[i] = T();
}
my_size = new_size;
}
}
телефонный код:
int main()
{
Vector<int> v;
v.reserve(2);
assert(v.capacity() == 2);
cout << "SUCCESSFUL!!!\n";
}
Я получаю успешный выход, но это когда Разрушитель называется, что я получаю ошибку я считаю.
Нам нужно больше кода, чтобы это определить проблему. Покажите нам класс и покажите нам, как вы используете класс, пожалуйста. – 0x499602D2
Еще лучше показать полный образец кода (включая основную функцию), который компилирует и демонстрирует проблему. –
Извините, я делаю это, чтобы учиться. Не захотелось публиковать слишком много кода в случае, если ошибка не была в деконструкторе, тогда мне нужно будет продолжать искать. –