mmcs-sfedu/PL_Lections_2014-2015

Лекция 13

Closed this issue · 10 comments

operator+(const myvectror<T>& v1, const myvectror<T>& v2) 

Не хватает возвращаемого значения.

Исправил.
Честно говоря Admin из-за нехватки времени эту тему только начал объяснять, думаю на следующей лекции будет повторять эту часть.

Ещё вопрос: в move-конструкторе (с &&) точно const для параметра писали?

Я этот кусок переписывал с доски, поэтому, скорее всего, так и писали - на следующей лекции надо будет уточнить.

Ооок.

Рано ещё закрывать gg

А вот это что такое? оО (исправлено)

std::copy(data, data + n), nd);

Ужасные названия: (исправлено)

    int n = (sz < nsn) ? sz : nsz;
    std::copy(data, data + n), nd);
    delete[] data;
    data = nd;
    sz = nsz;

Если уж обращаемся к полям класса, то следует, наверное, их тоже написать, а не говорить "вот у нас там когда-то был класс вектор" и ставить троеточие. (исправлено)

Ещё мне не нравится, когда мне говорят, что мы что-то можем, а потом оказывается, что это не работает. Стоит, наверное, заменить, на можем попробовать: (исправлено)

Допустим нам необходимо создать матрицу 3x4, тогда мы можем 
реализовать ее следующим образом. (...) 
На данном этапе эта строка не сработает, компилятор выдаст ошибку.

Ну, скобочку можно было бы молча исправить, а с названиями ты поторопился, когда описывали этот класс в 11 лекции там были другие имена переменных.

Я открыл лекцию, где этот класс был описан впервые, и вот там всё было хорошо с названиями.
В любом случае, после того, как я явно указал приватные поля, нет разницы, что там было в какой-то лекции. И в любом случае суть остаётся та же: названия ужасны nsz, nd, ну что это?

Вот ещё, плохо понимаю, что здесь имелось в виду: (элемента?) (исправлено)

В данном случае значение элемент будет присваиваться по ссылке,

А что это за такой деструктор? Вообще не понимаю >_< (исправлено)

будет вызван деструктор `~m() delete[] data`

Может, имелось в виду, что будет вызван ~m(), который эквивалентен delete[] data?

Наверное, имелось в виду перед закрытием: (исправлено)

перед закрыванием фигурной скобки 

Ненавижу табы. Если есть возможность поставить замену таба на 4 пробела, поставьте. Править расположение комментариев в коде противно, так как текст разбрасывается по всему редактору из-за этих табов. (все табы заменены на 4 пробела)

friend
    myvector<T> operator+(const myvectror<T>& v1, const myvectror<T>& v2) 

Наверное, имелось в виду myvector<T> & ope..? (не исправлено)

Где было с названиями все правильно? data вообще имеет тип T_, а не int_

Теперь по лекции, не очевидные моменты:

1�. А почему вызывать конструктор в mdata(m) уже поздно? Всегда считал, что правильнее вызывать конструктор mdata в теле конструктора matrix, например, для обработки случая m < 0.

class matrix {
    myvector<myvectror<T>> mdata;

    public:
        // Вызывать конструктор mdata(m) в теле конструктора       
        // matrix уже поздно, а при объявлении еще рано, поэтому 
        // конструктор необходимо вызывать в списке инициализации
        matrix(int m, int n): mdata(m)  { ... }
}

2�. RVO уже раньше была? А то совсем там всё глухо, внизу лекции.

А может быть стоит лекции посещать?!

По поводу первого: вопрос интересный, думаю стоить его на форуме задать.
А Return Value Optimization это 12 лекция, Но Admin'у хватило времени только чтобы начать рассказывать про Moving-конструкторы, поэтому, наверняка, все это повторим на следующей лекции.