Вы удаляете массив, на который указывает array
, дважды: один раз в insert
и снова в ~DynamicArray
.
Помните, что для каждого вызова new
должен быть ровно один, и толькоодин, позвоните на delete
.Также помните, что вы не delete
указатели, вы delete
объекты, на которые указывают указатели .
Вот набор графиков, который, надеюсь, прояснит, что происходит:
После конструктора:
array
+-------+ +--+--+--+-----+--+
| +--------> | | | ... | |
+-------+ +--+--+--+-----+--+
После X *tempArray = new X[Reserve_size + _DEFAULT_SIZE]
:
array
+-------+ +--+--+--+-----+--+
| +--------> | | | ... | |
+-------+ +--+--+--+-----+--+
tmpArray
+-------+ +--+--+--+-----+--+-----+--+--+
| +--------> | | | ... | | ... | | |
+-------+ +--+--+--+-----+--+-----+--+--+
После delete[] array
:
array
+-------+
| +-------->
+-------+
tmpArray
+-------+ +--+--+--+-----+--+-----+--+--+
| +--------> | | | ... | | ... | | |
+-------+ +--+--+--+-----+--+-----+--+--+
После array = tempArray
:
array
+-------+
| +---------+
+-------+ |
|
tmpArray |
+-------+ +v-+--+--+-----+--+-----+--+--+
| +--------> | | | ... | | ... | | |
+-------+ +--+--+--+-----+--+-----+--+--+
После delete[] tempArray
:
array
+-------+
| +---------+
+-------+ |
|
tmpArray |
+-------+ v
| +-------->
+-------+
В ~DynamicArray
:
array
+-------+
| +---------+
+-------+ |
|
|
v
Ой, array
ни на что не указывает, так что вы можете 't delete[]
на что он указывает.