Weak pointers are too useful not to have, but we still need our own to enforce nonzeroness, better assertions, etc.