Anonymous
там говорящее имя функции - opAssign_has_no_allocation
Ned
Anonymous
и проверяется переиспользование памяти
Ned
Ned
Он там ЕСТЬ
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
}
Detur
не, лучше миллион раз присваивание делать в надежде что упадет
Anonymous
Anonymous
🦥Alex Fails
Проще перегрузить оператор new
Anonymous
проще уже написано
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>
Anonymous
Dumitru
А почему this != & right а не просто right?
Andrew
а чтобы он проверил, написав?
if( right )
Andrew
ты имеешь в виду перезгрузку оператора приведения к bool ?
Крылатый
Dumitru
Я про референс :)
Dumitru
Ведь можно написать
if ( this != right)
Крылатый
Разве?
Крылатый
Имхо, нет.
babysitter
Dumitru
Имхо, нет.
Я всегда так пишу, норм
Оно же передается как реф, зачем брать адрес
Cinder
Однажды страуструпа спросили о чем он сожалеет спустя годы работы над с++ и тот ответил: " о том что зис - не ссылка"
Dumitru
Ах теперь до меня дошло
Я делал *this != Obj
babysitter
это все не то. ты правиряешь равенство объектов - относительно дорогая операция. в классике пишут сравнение указателей, чтобы исключить ошибку самоприсваивания.
babysitter
а вообще copy-and-swap
Dumitru
Я понял)
Vladislav
Cinder
Сочувствую
Cinder
Только у школьников во дворе. Тогда уж сделай другое имя, чтоб не ломать совместимость кода
Cinder
У нас в проекте мфц почти нет, но создатели мфц продолжают пить мою крофь
Cinder
Я знаю что ты ответишь
Vladislav
на самом деле, страуструп бы ответил "о том что не выкинул к *уям сишный препроцессор"
Artem
ну бэквард компатибилити же
Artem
this не пришел из си
Cinder
Не, он им доволен.
babysitter
Cinder
А чем тебе не нравится страуструпное отношение к своей прожитой и неоднозначной жизни?
babysitter
этот неоднозначный настолько, что мог сказать, что угодно.
Ned
Anonymous
Ned
Dumitru
Andrew
Вообще, для твоего примера должен быть перегружен оператор сравнения
Andrew
Потому что ссылки сами по себе не сравниваются, это свойство указателей
Dmitry
а кто-нибудь разбирался с протоколом телеграма? И вообще с логикой работы оного.
есть старая проблема и вот не знаю как подступиться
🦥Alex Fails
А что там?
Dmitry
есть cli для телеграма.
когда супергруппа доростает до ~220 человек — перестают приходить оповещения о новых сообщениях.
может есть какой-то нюанс при обработке, который может знать «нужный человек»
🦥Alex Fails
🦥Alex Fails
это какой-то баг
🦥Alex Fails
Есть хрень с ливами
Anonymous
Dmitry
Dmitry
🦥Alex Fails
с ливами?
уведомления о том, что кто-то ушел из чата
Dmitry
а… ну это вроде «фича» в десктопном клиенте
Anonymous
А его тут разве не было?
Andrew
Sprintf()
🦥Alex Fails
Был, да упал, и его убили
Anonymous
За що?