Gregory
Gregory
по лайфтайму
Andrei
И чего?
Andrei
Почему бы просто не пользоваться тогда unique_ptr + ссылки
Deleted Account
ссылки на што
Deleted Account
Andrei
на объект.
Deleted Account
на объект.
а чем указатель на объект не годится?
babysitter
нужно следить, чтобы объект не дай бог не помер и ссылки не повисли..
Deleted Account
ссылку хуй провериш на коректность
Deleted Account
легко обделаться можно
Deleted Account
Andrei
А указатель ты как проверишь?
Andrei
Andrei
Нужно следить.
Andrei
В противном случае ты не следишь и у тебя объект никогда может не умереть и непонятно когда он умирает.
babysitter
зачем тогда вообще юник поинтер, сделай локальный объект на стеке, наплоди объектов со ссылками и работай с ними в скоупе одном. не всегда же все просто
Крылатый
Онтопчик http://manu343726.github.io/2017/03/13/lock-free-job-stealing-task-system-with-modern-c.html
Andrei
Andrei
Но никакой проблемы в классе иметь контейнер или просто филд с юник_птром нет.
Andrei
Все объекты которые там сложены имеют владельцем инстанс твоего класса.
Andrei
Всё четко.
babysitter
babysitter
я понимаю аргументы, есть просто места, где очень удобно использовать шареды на константу
babysitter
есть просто крутые приемчики типа таких https://youtu.be/vxv74Mjt9_0?t=33m15s
Крылатый
Нужны boxed!
Крылатый
Интересно, а можно ли эмулировать в плюсах время жизни как в расте?
Andrei
Andrei
плюс мув
Andrei
плюс референсы
Andrei
Эмулируют поведение как в расте
Andrei
В точности.
Surreal
Fo
Hello
Fo
А чего .o файлы имеют разную контрольную сумму при пересборке?
Fo
Они хранят в себе дату или что?
Fo
На глазок оличие в пару байт
Stanislav
-frandom-seed=string
This option provides a seed that GCC uses in place of random numbers in generating certain symbol names that have to be different in every compiled file. It is also used to place unique stamps in coverage data files and the object files that produce them. You can use the -frandom-seed option to produce reproducibly identical object files.
Крылатый
Stanislav
Fo
Stanislav
Сеньку
правда там такое еще The string should be different for every file you compile
Anton
Ок, еще спрошу про unique_ptr. Вот у меня есть функция, которая создает объект A и возвращает unique_ptr<A>. Дальше, я добавляю его в контейнер std::map<int, unique_ptr<A». Как только я заполнил контейнер мне надо его скопировать в другой такой же контейнер и очистить. Собственно вопрос как скопировать std::map<int, unique_ptr> в такой же? С shared_ptr я просто делаю cont1 = cont2 и далее cont2.clear();
Evgenii
Andrei
Anton
можно конструкцию)) я понимаю что можно мувнуть)) синтаксически как это сделать?
Evgenii
Anton
пошел пробовать, спасибо!
Andrei
newContainer = std::move(oldContainer);
Andrei
Или если в конструкторе, то прям newContainer(std::move(oldContainer));
Anton
не не. контейнер существует уже
Matway
Anton
Еще интересный момент возник. А как мне вернуть из контейнера std::map<int, unique_ptr<A» указатель на объект A по индексу i. в функцию с такой вот сигнатурой take_A(A *a);
Andrei
map[i].get()
Anton
владение объектом само собой передается?
Anton
глупость спросил))
Anton
get у нас вернет указатель на объект в unique_ptr, а сам unique_ptr останется или как? не очень этот момент понятен
Andrei
Да, с самим объектом ничего не будет.
Andrei
Просто вернёт указатель.
Anton
аа он const вернет
Deleted Account
Anton
pointer get() const;
Anton
Это из cppreference
babysitter
это значит, что метод сам по себе не меняет содержимое объекта
babysitter
поля объекта unique_ptr
Deleted Account
да да
Anton
а если в функции кто-нибудь попытается освободить память по указателю, то что станет с unique_ptr? Тут гарантий получается нет?
babysitter
babysitter
звучит как дикие хаки какие-то
babysitter
используешь умные указатели — забудь про ручное освобождение памяти
Deleted Account
Deleted Account
ибо нехуй
Anton
ну тут такое...)) это объекты protobuf. и я их передаю в функцию set_allocated_ Есть подозрение что он удаляет эти объекты после отработки
Andrei
С протобуфом надо по-совему обращаться да.
Andrei
Протобуф сам отслеживает время жизни.
Andrei
Но по-хорошему ты можешь спокойно брать тупо указатели на подполя и подобъекты протобуфовского объекта, покуда сам объект жив.
Andrei
У себя в проекте я именно так и делаю.