unreachable-code Что может вызвать это в C ++ 11? - PullRequest
3 голосов
/ 16 июня 2020

Я написал следующий код в Clion для моего C ++ 11:

Matrix<T> &Matrix<T>::operator=(const Matrix<T> &matrix) {
    if (this == &matrix) {
        return *this;
    }
    int matrix_size = matrix.size();
    T *temp = new T[matrix_size];
    try {
        for (int i = 0; i < matrix_size; ++i) {
            temp[i] = data[i];
        }
    }
    catch (...)
    {
        delete[] temp;
        throw;
    }
    delete[] data;
    data = temp;
    dimensions = matrix.dimensions;
    return *this;
}

Но он показывает мне, что то, что написано внутри catch, является недостижимым кодом, почему?

1 Ответ

1 голос
/ 16 июня 2020

Вероятно, Клион ошибается. Ясно, что это не является недостижимым, если T бросает на присваивание копии. 1007 * и в каждом случае проверяет, что используемый тип не бросает. Однако я все равно не согласен с этим, поскольку Matrix можно использовать там, где у Clion нет доступа.

Обратите внимание, что вы все равно не должны кодировать подобный код. Используйте std::vector вместо необработанного указателя и динамических c выделений. Тогда вам не нужен блок try-catch: std::vector позаботится об этом за вас.

Кроме того, я полагаю, вы хотели написать temp[i] = matrix.data[i]; в l oop.

...