Указатель на данные бы в контрольный блок. Это в том числе позволит aliasing c-tor
aliasing c-tor - это make_shared ведь?
а как же move-конструктор и move оператор присваивания?
да, и swap/reset ещё
еще нужно не забыть про move для unique_ptr
unique я не делал, только shared/weak
не, я про то, что unique можно "расширить" до shared путем move оператора присваивания
void foo(shared_ptr<int>); int a; foo(&a); // boom
Зачем weak хранит T*?)
Чтобы создать shared, когда делаем lock
На таком и обычный std shared_ptr сломается, разве нет?
Поддержки указателей на подобъект нет, а основной указатель можно из контрольного блока извлечь)
Отличие будет только в том что у него explicit конструктор
А в контрольном блоке на тот момент указателя не было
delete this; такое себе
Иначе shared_ptr в общем случае нереализуем
а как лучше? дублировать в shared и weak проверку на то, что weak counter обнулился?
В данном контексте — нет
мне кажется что да
В стдлибе не стесняются delete this
пусть не стесняются template<class _Tp> shared_ptr<_Tp>::~shared_ptr() { if (__cntrl_) __cntrl_->__release_shared(); }
наверное в целом большой разницы нет, мне просто всегда delete this глаз мозолит )
ну да, но если добавлять две проверки в shared и weak - то будет тратиться больше тактов, а это же драгоценное время
Ничего плохого нет
Обсуждают сегодня