Size: a a a

2020 July 29

UT

Unknown T. in supapro.cxx
Побитый Кирпич
На тривиальных типах (int, char и т.д.) прокатит, а на типах с конструкторами нет, там надо будет placement new делать, а для этого нужна сырая память, а не T[]
Ну вот у меня есть ресайз функция для перевыделения памяти, если превышается capacity. Там я завожу новый unique_ptr<T[]> большего размера, переписываю данные и делаю swap. Почему это не сработает со сложными типами?
источник

ПК

Побитый Кирпич... in supapro.cxx
Unknown T.
Ну вот у меня есть ресайз функция для перевыделения памяти, если превышается capacity. Там я завожу новый unique_ptr<T[]> большего размера, переписываю данные и делаю swap. Почему это не сработает со сложными типами?
Потому что они не должны конструироваться, пока не добавлены в вектор
источник

ПК

Побитый Кирпич... in supapro.cxx
То есть память должна быть выделена, а объекты не созданы
источник

АК

Александр Караев... in supapro.cxx
Unknown T.
Ну вот у меня есть ресайз функция для перевыделения памяти, если превышается capacity. Там я завожу новый unique_ptr<T[]> большего размера, переписываю данные и делаю swap. Почему это не сработает со сложными типами?
потому что у тебя тогда хранится capacity штук созданных элементов, а должно быть size штук
источник

ПК

Побитый Кирпич... in supapro.cxx
Unknown T.
Ну вот у меня есть ресайз функция для перевыделения памяти, если превышается capacity. Там я завожу новый unique_ptr<T[]> большего размера, переписываю данные и делаю swap. Почему это не сработает со сложными типами?
Ты вообще понял тему с size+capacity? У вектора на самом деле 2 размера
источник

ПК

Побитый Кирпич... in supapro.cxx
Это нужно чтоб время вставки в конец было амортизированной константой, а не линейным
источник

UT

Unknown T. in supapro.cxx
Тему с size + capacity я понял, да.
То есть со сложными объектами не прокатит из-за того, что мы по сути ещё не знаем, что передать в конструктор, но память надо выделить
источник

UT

Unknown T. in supapro.cxx
Но эта проблема остается актуальной и без использования смарт поинтеров, верно?
источник

NI

Nikita Ivanov in supapro.cxx
где можно спросить про асио?
источник

ПК

Побитый Кирпич... in supapro.cxx
Unknown T.
Тему с size + capacity я понял, да.
То есть со сложными объектами не прокатит из-за того, что мы по сути ещё не знаем, что передать в конструктор, но память надо выделить
не просто не знаем, а не должны создавать вообще их, только выделить под них память. То есть в твоём классе нужно хранить сырую char* память и делать туда placement new при конструировании объекта
источник

ПК

Побитый Кирпич... in supapro.cxx
Nikita Ivanov
где можно спросить про асио?
Смотря что
источник

ПК

Побитый Кирпич... in supapro.cxx
Unknown T.
Но эта проблема остается актуальной и без использования смарт поинтеров, верно?
Да
источник

NI

Nikita Ivanov in supapro.cxx
Побитый Кирпич
Смотря что
проблемы с асинк получением, у меня чет хендлер вызывается только когда сокет отключается
источник

DP

Denis Paukaev in supapro.cxx
Nikita Ivanov
проблемы с асинк получением, у меня чет хендлер вызывается только когда сокет отключается
По такому описанию можно сказать что чёт случилось наверное
источник

ПК

Побитый Кирпич... in supapro.cxx
Unknown T.
Но эта проблема остается актуальной и без использования смарт поинтеров, верно?
Хотя с другой стороны я тут подумал, ты не можешь нормально там unique_ptr заюзать, инчае у тебя вектор станет некопируемым
источник

NI

Nikita Ivanov in supapro.cxx
Denis Paukaev
По такому описанию можно сказать что чёт случилось наверное
дай договорить пж
источник

ПК

Побитый Кирпич... in supapro.cxx
Unknown T.
Но эта проблема остается актуальной и без использования смарт поинтеров, верно?
Так что на самом деле это главная проблема
источник

UT

Unknown T. in supapro.cxx
Побитый Кирпич
Хотя с другой стороны я тут подумал, ты не можешь нормально там unique_ptr заюзать, инчае у тебя вектор станет некопируемым
что мешает копировать unique_ptr? Ну просто создать ещё один и записаь все значения из старого
источник

ПК

Побитый Кирпич... in supapro.cxx
Unknown T.
что мешает копировать unique_ptr? Ну просто создать ещё один и записаь все значения из старого
Ну ты уже много сам делаешь
источник

В

Владимир in supapro.cxx
Егор
Есть какой-то красивый способ проитерироваться по двум туплям одновременно (размеры одинаковые)? У меня только с index_sequence идеи есть. Хочу вот так
auto tuple_one = getTuple<1>();
auto tuple_two = getTuple<2>();
for (int i = 0; i < std::tuple_size_v(tuple_two);++i)
 container.insert({get<i>(tuple_one),get<i>(tuple_two)
})
boost::hana::tuple и boost::hana::literals::operator тебе помогут.
источник