Size: a a a

2020 October 15

AT

Anatoly Tomilov in pro.cxx
если  std::shared_ptr типа наследованного от std::enable_shared_from_this через aliasing c-tor создавать вот так: std::shared_ptr<T> p{anotherPtr, new T};, то у p->shared_from_this() будет control block свой собственный ведь? Не control block самого p или anotherPtr?
источник

АК

Александр Караев... in pro.cxx
Андрей Руссков
к визитору + напиши ) И не size_t
ну это прототип же.. std::size_t заменю на нужный тип, отполирую и будет отличное решение.
+ там не нужен, скастуется само
источник

АР

Андрей Руссков... in pro.cxx
самое смешное что с throw работает такая тема:
((cond(arg) ? throw blablabla : false) || ...);
а с return нет
источник

АК

Александр Караев... in pro.cxx
Андрей Руссков
самое смешное что с throw работает такая тема:
((cond(arg) ? throw blablabla : false) || ...);
а с return нет
я думал про throw, но это было бы действительно жутко
источник

АР

Андрей Руссков... in pro.cxx
ну да, optional бы раем показался
источник

АР

Андрей Руссков... in pro.cxx
Anatoly Tomilov
если  std::shared_ptr типа наследованного от std::enable_shared_from_this через aliasing c-tor создавать вот так: std::shared_ptr<T> p{anotherPtr, new T};, то у p->shared_from_this() будет control block свой собственный ведь? Не control block самого p или anotherPtr?
срочно нужен стикер с курящим Маском
источник

AT

Anatoly Tomilov in pro.cxx
Андрей Руссков
срочно нужен стикер с курящим Маском
я бы не понял что это значит
источник

АР

Андрей Руссков... in pro.cxx
aliasing конструктор вроде использует control block предыдущего shared_ptr, соответственно если элемент унаследован от enable_shared_from_this, в оригинальном shared_ptr будет использован control block из enable_shared_from_this и он и должен использоваться
источник

АР

Андрей Руссков... in pro.cxx
но это не точно офк
источник

AT

Anatoly Tomilov in pro.cxx
Андрей Руссков
aliasing конструктор вроде использует control block предыдущего shared_ptr, соответственно если элемент унаследован от enable_shared_from_this, в оригинальном shared_ptr будет использован control block из enable_shared_from_this и он и должен использоваться
Но control block типа, наследованного от enable_shared_from_this, будет создан в момент выполнения new T. Он не должен переназначаться
источник

АР

Андрей Руссков... in pro.cxx
а, для того типа нет конечно. Вообще использовать aliasing constructor таким образом нельзя лол )
источник

AT

Anatoly Tomilov in pro.cxx
Можно, но приводит к нарушению нигде незадекларированного инварианта, что control block p и p->shared_from_this() должны совпадать. +я должен буду сам удалять &*p.
источник

АР

Андрей Руссков... in pro.cxx
ага
источник

АР

Андрей Руссков... in pro.cxx
блин меня бесит что каждый раз когда я хочу использовать этот конструктор у меня не shared_ptr а велосипед на замену atomic_shared_ptr )
источник

AT

Anatoly Tomilov in pro.cxx
copy c-tor enable_shared_from_this вообще что делает? Можно ли его заюзать для того же эффекта, что и aliasing c-tor shared_ptr?
источник

АР

Андрей Руссков... in pro.cxx
не, блоки то разные будут
источник

AT

Anatoly Tomilov in pro.cxx
Обязательно ли? enable_shared_from_this может содержать weak_ptr
источник

AT

Anatoly Tomilov in pro.cxx
A common implementation for enable_shared_from_this is to hold a weak reference (such as std::weak_ptr) to this
источник

AT

Anatoly Tomilov in pro.cxx
А ну понятно. Он всё равно создаёт new enable_shared_from_this
источник

AT

Anatoly Tomilov in pro.cxx
enable_shared_from_this(const enable_shared_from_this &) : enable_shared_from_this{} {} - наверное так определён
источник