diff --git a/doc/smart_ptr/shared_ptr.adoc b/doc/smart_ptr/shared_ptr.adoc index 64761dd..110e511 100644 --- a/doc/smart_ptr/shared_ptr.adoc +++ b/doc/smart_ptr/shared_ptr.adoc @@ -132,7 +132,6 @@ namespace boost { template shared_ptr(shared_ptr && r) noexcept; template shared_ptr(shared_ptr const & r, element_type * p) noexcept; - template shared_ptr(shared_ptr && r, element_type * p) noexcept; template explicit shared_ptr(weak_ptr const & r); @@ -373,7 +372,7 @@ template shared_ptr(shared_ptr const & r, element_type * p) noexcept [none] * {blank} + -Effects:: constructs a `shared_ptr` that shares ownership with `r` and stores `p`. +Effects:: Copy-constructs a `shared_ptr` from `r`, while storing `p` instead. Postconditions:: `get() == p && use_count() == r.use_count()`. diff --git a/doc/smart_ptr/weak_ptr.adoc b/doc/smart_ptr/weak_ptr.adoc index d51eaa1..af2fee2 100644 --- a/doc/smart_ptr/weak_ptr.adoc +++ b/doc/smart_ptr/weak_ptr.adoc @@ -88,6 +88,10 @@ namespace boost { weak_ptr(weak_ptr && r) noexcept; + template weak_ptr(shared_ptr const & r, element_type * p) noexcept; + template weak_ptr(weak_ptr const & r, element_type * p) noexcept; + template weak_ptr(weak_ptr && r, element_type * p) noexcept; + ~weak_ptr() noexcept; weak_ptr & operator=(weak_ptr const & r) noexcept; @@ -98,6 +102,8 @@ namespace boost { long use_count() const noexcept; bool expired() const noexcept; + bool empty() const noexcept; + shared_ptr lock() const noexcept; void reset() noexcept; @@ -157,6 +163,21 @@ weak_ptr(weak_ptr && r) noexcept; Effects:: Constructs a `weak_ptr` that has the value `r` held. Postconditions:: `r` is empty. +### aliasing constructors +``` +template weak_ptr(shared_ptr const & r, element_type * p) noexcept; +``` +``` +template weak_ptr(weak_ptr const & r, element_type * p) noexcept; +``` +``` +template weak_ptr(weak_ptr && r, element_type * p) noexcept; +``` +Effects:: Constructs a `weak_ptr` from `r` as if by using the corresponding converting/copy/move constructor, but stores `p` instead. +Postconditions:: `use_count() == r.use_count()`. When `!expired()`, `shared_ptr(*this).get() == p`. + +NOTE: These constructors are an extension, not present in `std::weak_ptr`. + ### destructor ``` ~weak_ptr() noexcept; @@ -204,6 +225,17 @@ bool expired() const noexcept; + Returns:: `use_count() == 0`. +### empty +``` +bool empty() const noexcept; +``` +[none] +* {blank} ++ +Returns:: `true` when `*this` is empty, `false` otherwise. + +NOTE: This function is an extension, not present in `std::weak_ptr`. + ### lock ``` shared_ptr lock() const noexcept;