diff --git a/doc/smart_ptr/shared_ptr.adoc b/doc/smart_ptr/shared_ptr.adoc index 8208c90..f7e5335 100644 --- a/doc/smart_ptr/shared_ptr.adoc +++ b/doc/smart_ptr/shared_ptr.adoc @@ -412,11 +412,11 @@ template shared_ptr(std::unique_ptr && r); + Requires:: `Y*` should be convertible to `T*`. -Effects:: Equivalent to `shared_ptr(r.release(), r.get_deleter())` when `D` is not a reference type. Otherwise, equivalent to - `shared_ptr(r.release(), del)`, where `del` is a deleter that stores the reference `rd` returned from `r.get_deleter()` and - `del(p)` calls `rd(p)`. - -Postconditions:: `use_count() == 1`. +Effects:: +- When `r.get() == 0`, equivalent to `shared_ptr()`; +- When `D` is not a reference type, equivalent to `shared_ptr(r.release(), r.get_deleter())`; +- Otherwise, equivalent to `shared_ptr(r.release(), del)`, where `del` is a deleter that stores the reference `rd` returned + from `r.get_deleter()` and `del(p)` calls `rd(p)`. Throws:: `std::bad_alloc`, or an implementation-defined exception when a resource other than memory could not be obtained.