Правильный ли конструктор копирования?

У меня есть класс с вектором комплексных чисел. Я хочу сделать для него конструктор перемещения. По моей логике, сначала я должен из другого объекта который мы перемещаем скопировать все данные, а потом удалить все. Как удалить все значения вектора я знаю, а как превратить его в nullptr не уверен. Правильно ли я все делаю?

#include <iostream>
#include<complex>
#include<ostream>
#include<vector>
#include<algorithm>

using namespace std::complex_literals;
class CComplexVector
{
public:
    CComplexVector() {} //default
    CComplexVector(size_t _size)
    {
        vector.resize(_size);
    }
    CComplexVector(CComplexVector& other)
    {
        vector.resize(other.vector.size());
        for (size_t i = 0; i < vector.size(); ++i)
        {
            vector[i] = other.vector[i];
        }
    }
    CComplexVector(CComplexVector&& other) noexcept
    {
        vector.resize(other.vector.size());
        for (size_t i = 0; i < vector.size(); ++i)
        {
            vector[i] = other.vector[i];
        }
        
        other.vector.~vector();
    }

private:
    std::vector<std::complex<float>> vector;
};


 int main()
{

    return 0;
}

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

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

Первое правило написания копирующего/перемещающего конструктора и т. п. - вообще не писать их, если возможно.

Для вашего класса компилятор сгенерирует и тот и другой автоматически, руками их писать не надо.

Сгенерированные конструкторы будут примерно такие:

CComplexVector(const CComplexVector &other) : vector(other.vector) {}
CComplexVector(CComplexVector &&other) noexcept : vector(std::move(other.vector)) {}

И плюс будут операторы присваивания в духе:

CComplexVector &operator=(const CComplexVector &other) {vector = other.vector; return *this;}
CComplexVector &operator=(CComplexVector &&other) noexcept {vector = std::move(other.vector); return *this;}

Тут нет никакой магии, она вся в std::vector.

→ Ссылка