Реализация класса Vector

Пытаюсь написать свой класс Vector и все вроде бы неплохо, но valgrind ловит утечки памяти. Есть подозрение на функцию Swap, которая обменивает содержимое векторов. Не нашел на просторах интернета, как красиво написать эту функцию, по образу и подобию стл, пришлось импровизировать, и, вероятно, из-за этой импровизации утекает память. Помогите, пожалуйста, найти ошибку.

    void swap(MyVec& a) {
        MyVec temporary(a); // с помощью конструктора копирования создаем временный объект
        a.cap = cap; //  вместимость вектора
        a.size = size; // размер вектора
        int* newvec = new int[a.cap]; // создаем новый вектор, в который будем записывать новое содержимое вектора а
        for (int i = 0; i < a.size; ++i) {
            newvec[i] = data[i]; // data - данные второго вектора (с которым идет обмен)
        }
        delete[] a.data; // удаляем старые данные
        a.data = newvec; //перезаписываем
        cap = temporary.cap; // меняем второй вектор, записываем в его данные из temporary
        size = temporary.size;
        int* ndata = new int[cap];
        for (int i = 0; i < size; ++i) {
            ndata[i] = temporary.data[i];
        }
        delete[] data;
        data = ndata;
    }

Ответы (1 шт):

Автор решения: KoVadim

Пытался разобраться, что там происходит, но это выше моих сил. Если у Вас там cap, size и указатель на данные, то просто обменяйте их и всех делов то.

void swap(MyVec& a) {
   std::swap(a.cap, this->cap);
   std::swap(a.size, this->size);
   std::swap(a.data, this->data);
}

я написал this-> специально.

→ Ссылка