samedi 14 octobre 2023

Move semantics with 2d array in C++

Can someone please explain me how to make move semantics with 2d array of floats in a right way? I tried something like that:

struct Matrix {
    Matrix& operator=(Matrix&& rhs) noexcept {
        if (this == &rhs) {
            return *this;
        }

        for (size_t i = 0; i < rows; ++i) {
            delete[] matrix[i];
        }

        delete[] matrix;
        matrix = rhs.matrix;

        for (size_t i = 0; i < rows; ++i) {
            matrix[i] = rhs.matrix[i];
            rhs.matrix[i] = nullptr;
        }

        rhs.matrix = nullptr;
        return *this;
    }

    ~Matrix() {
        for (size_t i = 0; i < rows; ++i) {
            delete[] matrix[i];
        }

        delete[] matrix;
    }

    int rows;
    int cols;
    float** matrix;
};

but in a line rhs.matrix = nullptr matrix became nullptr and I don't know how to fix it.

I tried to just change pointers in inner arrays but outer pointer leave with no changes. But I think it is wrong way because programm logic became incorrect.

Aucun commentaire:

Enregistrer un commentaire