They are only dangerous if you don't maintain a strong pointer to the same data. Typically when a weak pointer exists, a strong pointer also exists in the same scope. So it's up to you to ensure that an actual strong reference is maintained while you pass around weak pointers.
How often would you actually use a weak_ptr? Pretty often or very infrequently? Is it only useful for special cases that don't happen very often?
They just seem kind of dangerous, since they can get deleted at any moment...