Цель std::shared_ptr
- освободить управляемый объект, когда последний общий указатель, который указывает на него, уничтожен или переназначен куда-либо еще.Вы создали временный общий ptr, присвоили ему значение std::weak_ptr
, а затем оно просто уничтожается в конце выражения.Вы должны сохранить его:
auto shared = std::shared_ptr<void>(operator new(60), [](void *pi) { operator delete(pi); });
std::weak_ptr<void> rw = shared;
сейчас rw
не истечет, по крайней мере, пока shared
еще жив.