Ну, самое главное "что не так" - это отсутствие реализации копирующего конструктора и оператора копирования, при том, что в классе есть динамический массив. При помещении объекта в вектор происходит копирование, при котором будет скопировано только значение указателя, что обычно ведёт к проблемам.
Второе "что не так" - это совершенно непонятная работа с памятью. Массив ещё не выделен, а функция extend пытается сделать что-то странное:
int * temparr = new int(size);
должно быть, подразумевалось
int * temparr = new int[size];
а потом, если размер не нулевой, не проверяя, существует ли arr, читает оттуда.