Anonymous
там говорящее имя функции - opAssign_has_no_allocation
Anonymous
и проверяется переиспользование памяти
Ned
там говорящее имя функции - opAssign_has_no_allocation
Эт странно, аллокейшн работает
Ned
Он там ЕСТЬ
Anonymous
переиспользование
Anonymous
переиспользование
это не есть выделение новой
Anonymous
Ну как, ясно?
Anonymous
void opAssign_has_no_allocation() { // Arrange Table<int> five(5, 5); Table<int> another_five(5, 5); Table<int> four(4, 4); auto saved_five_ptr = five.data; auto assign = [](auto& lhs, auto& rhs, size_t count) { for (size_t _ = 0; _ < count; ++_) lhs = rhs; }; assign(five, another_five, 1'000'000); // Act assert(saved_five_ptr == five.data); // Assert assign(five, four, 1'000'000); // Act assert(saved_five_ptr == five.data); // Assert }
Anonymous
а че валгринд для лохов?
а что, лохи только валгрид могут?
Detur
не, лучше миллион раз присваивание делать в надежде что упадет
🦥Alex Fails
Проще перегрузить оператор new
Anonymous
проще уже написано
Andrew
это не есть выделение новой
шта? тоесть фиксированный размер и в конце не free() ?
Anonymous
?
Andrew
поясни
Andrew
сложный прекол
Andrew
тоесть ты имел в виду, что есть некий буфер фиксированной длины
Andrew
в который пишешь без выделения, освобождения?
Крылатый
Выделения...
Anonymous
template <class T> const matrix<T>& matrix<T>::operator =(const matrix<T> &right){ if (this != &right){ rows = right.rows; cols = right.cols; delete [] data; data = new T[rows*cols]; for (size_t i = 0; i < rows; ++i) for (size_t j = 0; j < cols; ++j) data[i*cols + j] = right.data[i*cols + j]; } return *this; }
Anonymous
matrix<T> ==Table<T>
Dumitru
А почему this != & right а не просто right?
Andrew
а чтобы он проверил, написав? if( right )
Andrew
ты имеешь в виду перезгрузку оператора приведения к bool ?
Крылатый
А почему this != & right а не просто right?
Потому что справа не указатель?
Dumitru
Я про референс :)
Dumitru
Ведь можно написать if ( this != right)
Крылатый
Разве?
Крылатый
Имхо, нет.
Dumitru
Имхо, нет.
Я всегда так пишу, норм Оно же передается как реф, зачем брать адрес
babysitter
Я всегда так пишу, норм Оно же передается как реф, зачем брать адрес
это же не джава. this - это указатель, ты не можешь сравнивать указатель со ссылкой.
Cinder
Однажды страуструпа спросили о чем он сожалеет спустя годы работы над с++ и тот ответил: " о том что зис - не ссылка"
Dumitru
Ах теперь до меня дошло Я делал *this != Obj
babysitter
это все не то. ты правиряешь равенство объектов - относительно дорогая операция. в классике пишут сравнение указателей, чтобы исключить ошибку самоприсваивания.
babysitter
а вообще copy-and-swap
Dumitru
Я понял)
Cinder
Сочувствую
Anonymous
Сочувствую
да не, круто же
Artem
#define this (*this)
Создатели MFC смотрят на тебя с укоризной
Cinder
Только у школьников во дворе. Тогда уж сделай другое имя, чтоб не ломать совместимость кода
Cinder
У нас в проекте мфц почти нет, но создатели мфц продолжают пить мою крофь
Cinder
Я знаю что ты ответишь
Vladislav
на самом деле, страуструп бы ответил "о том что не выкинул к *уям сишный препроцессор"
Artem
ну бэквард компатибилити же
Artem
this не пришел из си
Cinder
Не, он им доволен.
Vladislav
ну бэквард компатибилити же
все самые ужесные design-решения принимаются во имя бэквард компатибилити
Cinder
А чем тебе не нравится страуструпное отношение к своей прожитой и неоднозначной жизни?
babysitter
этот неоднозначный настолько, что мог сказать, что угодно.
Ned
А почему this != & right а не просто right?
Лекция Касперского, 1:04:00, детектед
Ned
А почему this != & right а не просто right?
Копирование не нужно, если объекты лежат по одному адресу
Ned
Лекция Касперского, 1:04:00, детектед
О, ты даже лучший вопрос получил
Andrew
Ах теперь до меня дошло Я делал *this != Obj
То-то и оно ) а в примере сравнивались адреса )
Andrew
Вообще, для твоего примера должен быть перегружен оператор сравнения
Andrew
Потому что ссылки сами по себе не сравниваются, это свойство указателей
Dmitry
а кто-нибудь разбирался с протоколом телеграма? И вообще с логикой работы оного. есть старая проблема и вот не знаю как подступиться
🦥Alex Fails
А что там?
Dmitry
есть cli для телеграма. когда супергруппа доростает до ~220 человек — перестают приходить оповещения о новых сообщениях. может есть какой-то нюанс при обработке, который может знать «нужный человек»
🦥Alex Fails
это какой-то баг
🦥Alex Fails
Есть хрень с ливами
Dmitry
Учитывая, что спеки не обновляли с 2014 — врядли
а почему врятли, если давно не обновляли?
Anonymous
а почему врятли, если давно не обновляли?
Потому что все, кто пытался говорят что там говнокод и я лучше пойду назад в IRC
🦥Alex Fails
с ливами?
уведомления о том, что кто-то ушел из чата
Dmitry
а… ну это вроде «фича» в десктопном клиенте
Anonymous
А его тут разве не было?
Andrew
Sprintf()
🦥Alex Fails
Был, да упал, и его убили
Anonymous
За що?