forked from boostorg/smart_ptr
weak_ptr::expired() added; weak_ptr documentation updated.
[SVN r13141]
This commit is contained in:
@ -97,7 +97,7 @@ public:
|
|||||||
|
|
||||||
T * get() const // never throws; unsafe in multithreaded programs!
|
T * get() const // never throws; unsafe in multithreaded programs!
|
||||||
{
|
{
|
||||||
return use_count() == 0? 0: px;
|
return pn.use_count() == 0? 0: px;
|
||||||
}
|
}
|
||||||
|
|
||||||
long use_count() const // never throws
|
long use_count() const // never throws
|
||||||
@ -105,6 +105,11 @@ public:
|
|||||||
return pn.use_count();
|
return pn.use_count();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool expired() const // never throws
|
||||||
|
{
|
||||||
|
return pn.use_count() == 0;
|
||||||
|
}
|
||||||
|
|
||||||
void swap(this_type & other) // never throws
|
void swap(this_type & other) // never throws
|
||||||
{
|
{
|
||||||
std::swap(px, other.px);
|
std::swap(px, other.px);
|
||||||
|
@ -297,7 +297,7 @@ q = p;
|
|||||||
<pre>template<typename T>
|
<pre>template<typename T>
|
||||||
bool operator<(shared_ptr<T> const & a, shared_ptr<T> const & b); // never throws</pre>
|
bool operator<(shared_ptr<T> const & a, shared_ptr<T> const & b); // never throws</pre>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<p><b>Returns:</b> an implementation-defined value such that <code>operator<</code>
|
<p><b>Returns:</b> an implementation-defined value such that <b>operator<</b>
|
||||||
is a strict weak ordering as described in section 25.3 <code>[lib.alg.sorting]</code>
|
is a strict weak ordering as described in section 25.3 <code>[lib.alg.sorting]</code>
|
||||||
of the C++ standard.</p>
|
of the C++ standard.</p>
|
||||||
<p><b>Throws:</b> nothing.</p>
|
<p><b>Throws:</b> nothing.</p>
|
||||||
@ -343,7 +343,7 @@ q = p;
|
|||||||
<LI>
|
<LI>
|
||||||
Otherwise, a default-constructed <STRONG>shared_ptr<T></STRONG> object.</LI></UL>
|
Otherwise, a default-constructed <STRONG>shared_ptr<T></STRONG> object.</LI></UL>
|
||||||
<P><B>Throws:</B> <STRONG>std::bad_alloc</STRONG>.</P>
|
<P><B>Throws:</B> <STRONG>std::bad_alloc</STRONG>.</P>
|
||||||
<P><B>Exception safety:</B> If an exception is thrown, the function has no
|
<P><B>Exception safety:</B> If an exception is thrown, the function has no
|
||||||
effect.</P>
|
effect.</P>
|
||||||
<P><B>Notes:</B> the seemingly equivalent expression</P>
|
<P><B>Notes:</B> the seemingly equivalent expression</P>
|
||||||
<P><CODE>shared_ptr<T>(dynamic_cast<T*>(r.get()))</CODE></P>
|
<P><CODE>shared_ptr<T>(dynamic_cast<T*>(r.get()))</CODE></P>
|
||||||
|
416
weak_ptr.htm
416
weak_ptr.htm
@ -1,35 +1,25 @@
|
|||||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||||
|
|
||||||
<html>
|
<html>
|
||||||
|
<head>
|
||||||
<head>
|
<title>weak_ptr</title>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
||||||
<title>weak_ptr</title>
|
</head>
|
||||||
</head>
|
<body bgcolor="#ffffff" text="#000000">
|
||||||
|
<h1><img src="../../c++boost.gif" alt="c++boost.gif (8819 bytes)" align="middle" width="277" height="86">weak_ptr
|
||||||
<body bgcolor="#FFFFFF" text="#000000">
|
class template</h1>
|
||||||
|
<p>The <b>weak_ptr</b> class template stores a pointer to an object that's already
|
||||||
<h1><img src="../../c++boost.gif" alt="c++boost.gif (8819 bytes)" align="middle" width="277" height="86">weak_ptr class template</h1>
|
managed by a <b>shared_ptr</b>. When the object last <b>shared_ptr</b> to the
|
||||||
|
object goes away and the object is deleted, all <b>weak_ptr</b> objects have
|
||||||
<p>The <b>weak_ptr</b> class template stores a pointer to an
|
their stored pointers set to 0.</p>
|
||||||
object that's already managed by a <b>shared_ptr</b>. When the
|
<p>Every <b>weak_ptr</b> meets the <b>CopyConstructible</b> and <b>Assignable</b> requirements
|
||||||
object last <b>shared_ptr</b> to the object goes away and the object
|
of the C++ Standard Library, and so can be used in standard library containers.
|
||||||
is deleted, all <b>weak_ptr</b> objects have their stored pointers
|
Comparison operators are supplied so that <b>weak_ptr</b> works with the
|
||||||
set to 0.</p>
|
standard library's associative containers.</p>
|
||||||
|
<p>The class template is parameterized on <b>T</b>, the type of the object pointed
|
||||||
<p>Every <b>weak_ptr</b> meets the <b>CopyConstructible</b>
|
to. <b>T</b> must meet the smart pointer <a href="smart_ptr.htm#Common requirements">
|
||||||
and <b>Assignable</b> requirements of the C++ Standard Library, and so
|
common requirements</a>.</p>
|
||||||
can be used in standard library containers. Comparison operators
|
<h2><a name="Synopsis">Synopsis</a></h2>
|
||||||
are supplied so that <b>weak_ptr</b> works with
|
<pre>namespace boost {
|
||||||
the standard library's associative containers.</p>
|
|
||||||
|
|
||||||
<p>The class template is parameterized on <b>T</b>, the type of the object
|
|
||||||
pointed to. <b>T</b> must meet the smart pointer
|
|
||||||
<a href="smart_ptr.htm#Common requirements">common requirements</a>.</p>
|
|
||||||
|
|
||||||
<h2><a name="Synopsis">Synopsis</a></h2>
|
|
||||||
|
|
||||||
<pre>namespace boost {
|
|
||||||
|
|
||||||
template<typename T> class weak_ptr {
|
template<typename T> class weak_ptr {
|
||||||
|
|
||||||
@ -48,12 +38,10 @@ pointed to. <b>T</b> must meet the smart pointer
|
|||||||
template<typename Y> weak_ptr & <a href="#assignment">operator=</a>(shared_ptr<Y> const & r); // never throws
|
template<typename Y> weak_ptr & <a href="#assignment">operator=</a>(shared_ptr<Y> const & r); // never throws
|
||||||
|
|
||||||
void <a href="#reset">reset</a>();
|
void <a href="#reset">reset</a>();
|
||||||
|
T * <a href="#get">get</a>() const; // never throws; unsafe in multithreaded code!
|
||||||
T & <a href="#indirection">operator*</a>() const; // never throws
|
|
||||||
T * <a href="#indirection">operator-></a>() const; // never throws
|
|
||||||
T * <a href="#get">get</a>() const; // never throws
|
|
||||||
|
|
||||||
long <a href="#use_count">use_count</a>() const; // never throws
|
long <a href="#use_count">use_count</a>() const; // never throws
|
||||||
|
bool <a href="#expired">expired</a>() const; // never throws
|
||||||
|
|
||||||
void <a href="#swap">swap</a>(weak_ptr<T> & b); // never throws
|
void <a href="#swap">swap</a>(weak_ptr<T> & b); // never throws
|
||||||
};
|
};
|
||||||
@ -67,174 +55,218 @@ pointed to. <b>T</b> must meet the smart pointer
|
|||||||
|
|
||||||
template<typename T> void <a href="#free-swap">swap</a>(weak_ptr<T> & a, weak_ptr<T> & b); // never throws
|
template<typename T> void <a href="#free-swap">swap</a>(weak_ptr<T> & a, weak_ptr<T> & b); // never throws
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
shared_ptr<T> <a href="#make_shared">make_shared</a>(weak_ptr<T> const & r); // never throws
|
||||||
|
|
||||||
template<typename T, typename U>
|
template<typename T, typename U>
|
||||||
weak_ptr<T> <a href="#shared_static_cast">shared_static_cast</a>(weak_ptr<U> const & r); // never throws
|
weak_ptr<T> <a href="#shared_static_cast">shared_static_cast</a>(weak_ptr<U> const & r); // never throws
|
||||||
template<typename T, typename U>
|
template<typename T, typename U>
|
||||||
weak_ptr<T> <a href="#shared_dynamic_cast">shared_dynamic_cast</a>(weak_ptr<U> const & r);
|
weak_ptr<T> <a href="#shared_dynamic_cast">shared_dynamic_cast</a>(weak_ptr<U> const & r);
|
||||||
template<typename T, typename U>
|
template<typename T, typename U>
|
||||||
weak_ptr<T> <a href="#shared_polymorphic_cast">shared_polymorphic_cast</a>(weak_ptr<U> const & r);
|
weak_ptr<T> <a href="#shared_polymorphic_cast">shared_polymorphic_cast</a>(weak_ptr<U> const & r);
|
||||||
template<typename T, typename U>
|
template<typename T, typename U>
|
||||||
weak_ptr<T> <a href="#shared_polymorphic_downcast">shared_polymorphic_downcast</a>(weak_ptr<U> const & r); // never throws
|
weak_ptr<T> <a href="#shared_polymorphic_downcast">shared_polymorphic_downcast</a>(weak_ptr<U> const & r); // never throws
|
||||||
|
|
||||||
}</pre>
|
}
|
||||||
|
</pre>
|
||||||
<h2><a name="Members">Members</a></h2>
|
<h2><a name="Members">Members</a></h2>
|
||||||
|
<h3><a name="element_type">element_type</a></h3>
|
||||||
<h3><a name="element_type">element_type</a></h3>
|
<pre>typedef T element_type;</pre>
|
||||||
<pre>typedef T element_type;</pre>
|
<blockquote>
|
||||||
<p>Provides the type of the stored pointer.</p>
|
<p>Provides the type of the template parameter T.</p>
|
||||||
|
</blockquote>
|
||||||
<h3><a name="constructors">constructors</a></h3>
|
<h3><a name="constructors">constructors</a></h3>
|
||||||
|
<pre>explicit weak_ptr();</pre>
|
||||||
<pre>explicit weak_ptr();</pre>
|
<blockquote>
|
||||||
<p>Constructs a <b>weak_ptr</b>, with 0 as its stored pointer.
|
<p><b>Effects:</b> Constructs a <b>weak_ptr</b>.</p>
|
||||||
The only exception which may be thrown by this constructor is <b>std::bad_alloc</b>.
|
<p><b>Postconditions:</b> <A href="#use_count">use count</A> is 0; the stored
|
||||||
If an exception is thrown, the constructor has no effect.</p>
|
pointer is 0.</p>
|
||||||
|
<p><b>Throws:</b> <b>std::bad_alloc</b>.</p>
|
||||||
<pre>template<typename Y> weak_ptr</a>(shared_ptr<Y> const & r); // never throws</pre>
|
<p><b>Exception safety:</b> If an exception is thrown, the constructor has no
|
||||||
<p>Constructs a <b>weak_ptr</b>, as if by storing a copy of the pointer stored in <b>r</b>.
|
effect.</p>
|
||||||
Afterwards, the <a href="#use_count">use count</a> for all copies is unchanged.
|
<P><B>Notes:</B> <B>T</B> need not be a complete type. See the smart pointer <A href="smart_ptr.htm#Common requirements">
|
||||||
When the last <b>shared_ptr</b> is destroyed, the use count and stored pointer become 0.</p>
|
common requirements</A>.</P>
|
||||||
|
</blockquote>
|
||||||
<pre>weak_ptr(weak_ptr const & r); // never throws
|
<pre>template<typename Y> weak_ptr</A>(shared_ptr<Y> const & r); // never throws</pre>
|
||||||
|
<blockquote>
|
||||||
|
<p><b>Effects:</b> Constructs a <b>weak_ptr</b>, as if by storing a copy of the
|
||||||
|
pointer stored in <b>r</b>.</p>
|
||||||
|
<p><b>Throws:</b> nothing.</p>
|
||||||
|
<P><B>Notes:</B> The <a href="#use_count">use count</a> for all copies is
|
||||||
|
unchanged. When the last <b>shared_ptr</b> is destroyed, the use count and
|
||||||
|
stored pointer become 0.</P>
|
||||||
|
</blockquote>
|
||||||
|
<pre>weak_ptr(weak_ptr const & r); // never throws
|
||||||
template<typename Y> weak_ptr(weak_ptr<Y> const & r); // never throws</pre>
|
template<typename Y> weak_ptr(weak_ptr<Y> const & r); // never throws</pre>
|
||||||
<p>Constructs a <b>weak_ptr</b>, as if by storing a copy of the
|
<blockquote>
|
||||||
pointer stored in <b>r</b>.</p>
|
<p><b>Effects:</b> Constructs a <b>weak_ptr</b>, as if by storing a copy of the
|
||||||
|
pointer stored in <b>r</b>.</p>
|
||||||
<h3><a name="destructor">destructor</a></h3>
|
<p><b>Throws:</b> nothing.</p>
|
||||||
|
<P><B>Notes:</B> The <a href="#use_count">use count</a> for all copies is
|
||||||
<pre>~weak_ptr(); // never throws</pre>
|
unchanged.</P>
|
||||||
<p>Destroys this <b>weak_ptr</b> but has no effect on the object its stored pointer points to.
|
</blockquote>
|
||||||
<b>T</b> need not be a complete type.
|
<h3><a name="destructor">destructor</a></h3>
|
||||||
See the smart pointer <a href="smart_ptr.htm#Common requirements">common requirements</a>.</p>
|
<pre>~weak_ptr(); // never throws</pre>
|
||||||
|
<BLOCKQUOTE>
|
||||||
<h3><a name="operator=">assignment</a></h3>
|
<P><B>Effects:</B> Destroys this <b>weak_ptr</b> but has no effect on the object
|
||||||
|
its stored pointer points to.</P>
|
||||||
<pre>weak_ptr & <a href="#assignment">operator=</a>(weak_ptr const & r); // never throws
|
<P><B>Throws:</B> nothing.</P>
|
||||||
|
<P><B>Notes:</B> <B>T</B> need not be a complete type. See the smart pointer <A href="smart_ptr.htm#Common requirements">
|
||||||
|
common requirements</A>.</P>
|
||||||
|
</BLOCKQUOTE>
|
||||||
|
<h3><a name="assignment">assignment</a></h3>
|
||||||
|
<pre>weak_ptr & <a href="#assignment">operator=</a>(weak_ptr const & r); // never throws
|
||||||
template<typename Y> weak_ptr & <a href="#assignment">operator=</a>(weak_ptr<Y> const & r); // never throws
|
template<typename Y> weak_ptr & <a href="#assignment">operator=</a>(weak_ptr<Y> const & r); // never throws
|
||||||
template<typename Y> weak_ptr & <a href="#assignment">operator=</a>(shared_ptr<Y> const & r); // never throws</pre>
|
template<typename Y> weak_ptr & <a href="#assignment">operator=</a>(shared_ptr<Y> const & r); // never throws</pre>
|
||||||
<p>Constructs a new <b>weak_ptr</b> as described <a href="#constructors">above</a>,
|
<BLOCKQUOTE>
|
||||||
then replaces this <b>weak_ptr</b> with the new one, destroying the replaced object.</p>
|
<P><B>Effects:</B> Equivalent to <code>weak_ptr(r).swap(*this)</code>.</P>
|
||||||
|
<P><B>Throws:</B> nothing.</P>
|
||||||
<h3><a name="reset">reset</a></h3>
|
<P><B>Notes:</B> The implementation is free to meet the effects (and the implied
|
||||||
|
guarantees) via different means, without creating a temporary.</P>
|
||||||
<pre>void reset();</pre>
|
</BLOCKQUOTE>
|
||||||
<p>Constructs a new <b>weak_ptr</b> as described <a href="#constructors">above</a>,
|
<h3><a name="reset">reset</a></h3>
|
||||||
then replaces this <b>weak_ptr</b> with the new one, destroying the replaced object.
|
<pre>void reset();</pre>
|
||||||
The only exception which may be thrown is <b>std::bad_alloc</b>. If
|
<BLOCKQUOTE>
|
||||||
an exception is thrown, the <b>reset</b> has no effect.</p>
|
<P><B>Effects:</B> Equivalent to <code>weak_ptr().swap(*this)</code>.</P>
|
||||||
|
</BLOCKQUOTE>
|
||||||
<h3><a name="indirection">indirection</a></h3>
|
<h3><a name="get">get</a></h3>
|
||||||
|
<pre>T * get() const; // never throws</pre>
|
||||||
<pre>T & operator*() const; // never throws</pre>
|
<blockquote>
|
||||||
<p>Returns a reference to the object pointed to by the stored pointer.
|
<p><b>Returns:</b> the stored pointer (0 if all <b>shared_ptr</b> objects for that
|
||||||
Behavior is undefined if the stored pointer is 0.
|
pointer are destroyed.)</p>
|
||||||
Note that the stored pointer becomes 0 if all <b>shared_ptr</b> objects for that
|
<p><b>Throws:</b> nothing.</p>
|
||||||
pointer are destroyed.</p>
|
<P><B>Notes:</B> Using <b>get</b> in multithreaded code is dangerous. After the
|
||||||
|
function returns, the pointed-to object may be destroyed by a different thread,
|
||||||
<pre>T * operator->() const; // never throws</pre>
|
since the <b>weak_ptr</b> doesn't affect its <b>use_count</b>.</P>
|
||||||
<p>Returns the stored pointer.
|
</blockquote>
|
||||||
Behavior is undefined if the stored pointer is 0.
|
<h3><a name="use_count">use_count</a></h3>
|
||||||
Note that the stored pointer becomes 0 if all <b>shared_ptr</b> objects for that
|
<pre>long use_count() const; // never throws</pre>
|
||||||
pointer are destroyed.</p>
|
<blockquote>
|
||||||
|
<p><b>Returns:</b> the number of <b>shared_ptr</b> objects sharing ownership of the
|
||||||
<h3><a name="get">get</a></h3>
|
stored pointer.</p>
|
||||||
<pre>T * get() const; // never throws</pre>
|
<p><b>Throws:</b> nothing.</p>
|
||||||
<p>Returns the stored pointer.
|
<P><B>Notes:</B> <code>use_count()</code> is not necessarily efficient. Use only
|
||||||
Note that the stored pointer becomes 0 if all <b>shared_ptr</b> objects for that
|
for debugging and testing purposes, not for production code. <B>T</B> need not
|
||||||
pointer are destroyed.
|
be a complete type. See the smart pointer <A href="smart_ptr.htm#Common requirements">
|
||||||
<b>T</b> need not be a complete type.
|
common requirements</A>.</P>
|
||||||
See the smart pointer
|
</blockquote>
|
||||||
<a href="smart_ptr.htm#Common requirements">common requirements</a>.</p>
|
<h3><a name="expired">expired</a></h3>
|
||||||
|
<pre>bool expired() const; // never throws</pre>
|
||||||
<h3><a name="use_count">use_count</a></h3>
|
<blockquote>
|
||||||
<pre>long use_count() const; // never throws</pre>
|
<p><b>Returns:</b> <code>use_count() == 0</code>.</p>
|
||||||
<p>Returns the number of <b>shared_ptr</b> objects sharing ownership of the
|
<p><b>Throws:</b> nothing.</p>
|
||||||
stored pointer.
|
<P><B>Notes:</B> <code>expired()</code> may be faster than <code>use_count()</code>.
|
||||||
<b>T</b> need not be a complete type.
|
<B>T</B> need not be a complete type. See the smart pointer <A href="smart_ptr.htm#Common requirements">
|
||||||
See the smart pointer
|
common requirements</A>.</P>
|
||||||
<a href="smart_ptr.htm#Common requirements">common requirements</a>.</p>
|
</blockquote>
|
||||||
<p>Because <b>use_count</b> is not necessarily efficient to implement for
|
<h3><a name="swap">swap</a></h3>
|
||||||
implementations of <b>weak_ptr</b> that do not use an explicit reference
|
<pre>void swap(weak_ptr & b); // never throws</pre>
|
||||||
count, it might be removed from some future version. Thus it should
|
<blockquote>
|
||||||
be used for debugging purposes only, and <b>get</b> should be used for
|
<p><b>Effects:</b> Exchanges the contents of the two smart pointers.</p>
|
||||||
production code.</p>
|
<p><b>Throws:</b> nothing.</p>
|
||||||
|
<P><B>Notes:</B> <B>T</B> need not be a complete type. See the smart pointer <A href="smart_ptr.htm#Common requirements">
|
||||||
<h3><a name="swap">swap</a></h3>
|
common requirements</A>.</P>
|
||||||
<pre>void swap(weak_ptr & b); // never throws</pre>
|
</blockquote>
|
||||||
<p>Exchanges the contents of the two smart pointers.
|
<h2><a name="functions">Free Functions</a></h2>
|
||||||
<b>T</b> need not be a complete type.
|
<h3><a name="comparison">comparison</a></h3>
|
||||||
See the smart pointer
|
<pre>template<typename T, typename U>
|
||||||
<a href="smart_ptr.htm#Common requirements">common requirements</a>.</p>
|
|
||||||
|
|
||||||
<h2><a name="functions">Free Functions</a></h2>
|
|
||||||
|
|
||||||
<h3><a name="comparison">comparison</a></h3>
|
|
||||||
<pre>template<typename T, typename U>
|
|
||||||
bool operator==(weak_ptr<T> const & a, weak_ptr<U> const & b); // never throws
|
bool operator==(weak_ptr<T> const & a, weak_ptr<U> const & b); // never throws
|
||||||
template<typename T, typename U>
|
template<typename T, typename U>
|
||||||
bool operator!=(weak_ptr<T> const & a, weak_ptr<U> const & b); // never throws
|
bool operator!=(weak_ptr<T> const & a, weak_ptr<U> const & b); // never throws</pre>
|
||||||
template<typename T>
|
<blockquote>
|
||||||
|
<p><b>Returns:</b> <code>a.get() == b.get()</code>.</p>
|
||||||
|
<p><b>Throws:</b> nothing.</p>
|
||||||
|
<P><B>Notes:</B> <B>T</B> need not be a complete type. See the smart pointer <A href="smart_ptr.htm#Common requirements">
|
||||||
|
common requirements</A>.</P>
|
||||||
|
</blockquote>
|
||||||
|
<pre>template<typename T>
|
||||||
bool operator<(weak_ptr<T> const & a, weak_ptr<T> const & b); // never throws</pre>
|
bool operator<(weak_ptr<T> const & a, weak_ptr<T> const & b); // never throws</pre>
|
||||||
<p>Compares the stored pointers of the two smart pointers.
|
<blockquote>
|
||||||
<b>T</b> need not be a complete type.
|
<p><b>Returns:</b> an implementation-defined value such that <b>operator<</b> is
|
||||||
See the smart pointer
|
a strict weak ordering as described in section 25.3 <code>[lib.alg.sorting]</code>
|
||||||
<a href="smart_ptr.htm#Common requirements">common requirements</a>.</p>
|
of the C++ standard.</p>
|
||||||
<p>The <b>operator<</b> overload is provided to define an ordering so that <b>weak_ptr</b>
|
<p><b>Throws:</b> nothing.</p>
|
||||||
objects can be used in associative containers such as <b>std::map</b>.
|
<P><B>Notes:</B> Allows <STRONG>weak_ptr</STRONG> objects to be used as keys in
|
||||||
The implementation uses <b>std::less<T *></b> to perform the
|
associative containers. <B>T</B> need not be a complete type. See the smart
|
||||||
comparison. This ensures that the comparison is handled correctly, since the
|
pointer <A href="smart_ptr.htm#Common requirements">common requirements</A>.</P>
|
||||||
standard mandates that relational operations on pointers are unspecified (5.9 [expr.rel]
|
</blockquote>
|
||||||
paragraph 2) but <b>std::less<></b> on pointers is well-defined (20.3.3 [lib.comparisons]
|
<h3><a name="free-swap">swap</a></h3>
|
||||||
paragraph 8).</p>
|
<pre>template<typename T>
|
||||||
|
|
||||||
<h3><a name="free-swap">swap</a></h3>
|
|
||||||
<pre>template<typename T>
|
|
||||||
void swap(weak_ptr<T> & a, weak_ptr<T> & b) // never throws</pre>
|
void swap(weak_ptr<T> & a, weak_ptr<T> & b) // never throws</pre>
|
||||||
<p>Equivalent to <b>a.swap(b)</b>. Matches the interface of <b>std::swap</b>.
|
<BLOCKQUOTE>
|
||||||
Provided as an aid to generic programming.</p>
|
<P><B>Effects:</B> Equivalent to <code>a.swap(b)</code>.</P>
|
||||||
|
<P><B>Throws:</B> nothing.</P>
|
||||||
<h3><a name="shared_static_cast">shared_static_cast</a></h3>
|
<P><B>Notes:</B> Matches the interface of <B>std::swap</B>. Provided as an aid to
|
||||||
<pre>template<typename T, typename U>
|
generic programming.</P>
|
||||||
weak_ptr<T> shared_static_cast(weak_ptr<U> const & r); // never throws</pre>
|
</BLOCKQUOTE>
|
||||||
<p>Perform a <b>static_cast</b> on the stored pointer, returning another <b>weak_ptr</b>.
|
<h3><a name="make_shared">make_shared</a></h3>
|
||||||
The resulting smart pointer will share its use count with the original pointer.</p>
|
<pre>template<typename T>
|
||||||
|
shared_ptr<T> make_shared(weak_ptr<T> & const r) // never throws</pre>
|
||||||
<h3><a name="shared_dynamic_cast">shared_dynamic_cast</a></h3>
|
<BLOCKQUOTE>
|
||||||
<pre>template<typename T, typename U>
|
<P><B>Returns:</B> <code>r.expired()? shared_ptr<T>(): shared_ptr<T>(r)</code>.</P>
|
||||||
weak_ptr<T> shared_dynamic_cast(weak_ptr<U> const & r);</pre>
|
<P><B>Throws:</B> nothing.</P>
|
||||||
<p>Perform a <b>dynamic_cast</b> on the stored pointer, returning another <b>weak_ptr</b>.
|
</BLOCKQUOTE>
|
||||||
The resulting smart pointer will share its use count with the original pointer unless the result of the
|
<h3><a name="shared_static_cast">shared_static_cast</a></h3>
|
||||||
cast is 0. The only exception which may be thrown is <b>std::bad_alloc</b>, which may be thrown during the
|
<pre>template<typename T, typename U>
|
||||||
construction of the new <b>weak_ptr</b> if the result of the cast is 0. If an exception is thrown, the
|
weak_ptr<T> shared_static_cast(weak_ptr<U> const & r); // never throws</pre>
|
||||||
cast has no effect.</p>
|
<BLOCKQUOTE>
|
||||||
|
<P><STRONG>Requires:</STRONG> The expression <code>static_cast<T*>(r.get())</code>
|
||||||
<h3><a name="shared_polymorphic_cast">shared_polymorphic_cast</a></h3>
|
must be well-formed.</P>
|
||||||
<pre>template<typename T, typename U>
|
<P><B>Returns:</B> A <STRONG>weak_ptr<T></STRONG> object that stores a copy
|
||||||
weak_ptr<T> shared_polymorphic_cast(weak_ptr<U> const & r);</pre>
|
of <code>static_cast<T*>(r.get())</code> and shares ownership with <b>r</b>.</P>
|
||||||
<p>Perform a <a href="../conversion/cast.htm#Polymorphic_cast"><b>polymorphic_cast</b><a> on the stored pointer,
|
<P><B>Throws:</B> nothing.</P>
|
||||||
returning another <b>weak_ptr</b>.
|
</BLOCKQUOTE>
|
||||||
The resulting smart pointer will share its use count with the original pointer.
|
<h3><a name="shared_dynamic_cast">shared_dynamic_cast</a></h3>
|
||||||
The only exception which may be thrown is <b>std::bad_cast</b>, if the pointer type can not be converted.
|
<pre>template<typename T, typename U>
|
||||||
If an exception is thrown, the cast has no effect.</p>
|
weak_ptr<T> shared_dynamic_cast(weak_ptr<U> const & r);</pre>
|
||||||
|
<BLOCKQUOTE>
|
||||||
<h3><a name="shared_polymorphic_downcast">shared_polymorphic_downcast</a></h3>
|
<P><STRONG>Requires:</STRONG> The expression <CODE>dynamic_cast<T*>(r.get())</CODE>
|
||||||
<pre>template<typename T, typename U>
|
must be well-formed and its behavior defined.</P>
|
||||||
weak_ptr<T> shared_polymorphic_downcast(weak_ptr<U> const & r); // never throws</pre>
|
<P><B>Returns:</B></P>
|
||||||
<p>Perform a <a href="../conversion/cast.htm#Polymorphic_cast"><b>polymorphic_downcast</b><a> on the stored pointer,
|
<UL>
|
||||||
returning another <b>weak_ptr</b>.
|
<LI>
|
||||||
The resulting smart pointer will share its use count with the original pointer.</p>
|
When <CODE>dynamic_cast<T*>(r.get())</CODE> returns a nonzero
|
||||||
|
value, a <STRONG>weak_ptr<T></STRONG> object that stores a copy of
|
||||||
<hr>
|
it and shares ownership with <STRONG>r</STRONG>;
|
||||||
|
<LI>
|
||||||
<p>Revised <!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B %Y" startspan -->8 February 2002<!--webbot bot="Timestamp" i-checksum="38439" endspan --></p>
|
Otherwise, a default-constructed <STRONG>weak_ptr<T></STRONG> object.</LI></UL>
|
||||||
|
<P><B>Throws:</B> <STRONG>std::bad_alloc</STRONG>.</P>
|
||||||
<p>Copyright 1999 Greg Colvin and Beman Dawes. Copyright 2002 Darin Adler.
|
<P><B>Exception safety:</B> If an exception is thrown, the function has no effect.</P>
|
||||||
Permission to copy, use, modify, sell and distribute this document is granted
|
</BLOCKQUOTE>
|
||||||
provided this copyright notice appears in all copies.
|
<h3><a name="shared_polymorphic_cast">shared_polymorphic_cast</a></h3>
|
||||||
This document is provided "as is" without express or implied warranty,
|
<pre>template<typename T, typename U>
|
||||||
and with no claim as to its suitability for any purpose.</p>
|
weak_ptr<T> shared_polymorphic_cast(weak_ptr<U> const & r);</pre>
|
||||||
|
<BLOCKQUOTE>
|
||||||
</body>
|
<p><STRONG>Requires:</STRONG> The expression <CODE><A href="../conversion/cast.htm#Polymorphic_cast">
|
||||||
|
polymorphic_cast</A><T*>(r.get())</CODE> must be well-formed and
|
||||||
|
its behavior defined.</p>
|
||||||
|
<P><B>Returns:</B> A <STRONG>weak_ptr<T></STRONG> object that stores a copy
|
||||||
|
of <CODE><A href="../conversion/cast.htm#Polymorphic_cast">polymorphic_cast</A><T*>(r.get())</CODE>
|
||||||
|
and shares ownership with <B>r</B>.</P>
|
||||||
|
<P><B>Throws:</B> <STRONG>std::bad_cast</STRONG> when the pointer cannot be
|
||||||
|
converted.</P>
|
||||||
|
<P><B>Exception safety:</B> If an exception is thrown, the function has no effect.</P>
|
||||||
|
</BLOCKQUOTE>
|
||||||
|
<h3><a name="shared_polymorphic_downcast">shared_polymorphic_downcast</a></h3>
|
||||||
|
<pre>template<typename T, typename U>
|
||||||
|
weak_ptr<T> shared_polymorphic_downcast(weak_ptr<U> const & r); // never throws</pre>
|
||||||
|
<BLOCKQUOTE>
|
||||||
|
<p><STRONG>Requires:</STRONG> The expression <CODE><A href="../conversion/cast.htm#Polymorphic_cast">
|
||||||
|
polymorphic_downcast</A><T*>(r.get())</CODE> must be well-formed
|
||||||
|
and its behavior defined.</p>
|
||||||
|
<P><B>Returns:</B> A <STRONG>weak_ptr<T></STRONG> object that stores a copy
|
||||||
|
of <CODE><A href="../conversion/cast.htm#Polymorphic_cast">polymorphic_downcast</A><T*>(r.get())</CODE>
|
||||||
|
and shares ownership with <B>r</B>.</P>
|
||||||
|
<P><B>Throws:</B> nothing.</P>
|
||||||
|
</BLOCKQUOTE>
|
||||||
|
<hr>
|
||||||
|
<p>Revised <!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B %Y" startspan -->
|
||||||
|
8 March 2002<!--webbot bot="Timestamp" i-checksum="38439" endspan --></p>
|
||||||
|
<p>Copyright 1999 Greg Colvin and Beman Dawes. Copyright 2002 Darin Adler.
|
||||||
|
Copyright 2002 Peter Dimov. Permission to copy, use, modify, sell and
|
||||||
|
distribute this document is granted provided this copyright notice appears in
|
||||||
|
all copies. This document is provided "as is" without express or implied
|
||||||
|
warranty, and with no claim as to its suitability for any purpose.</p>
|
||||||
|
</A>
|
||||||
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
Reference in New Issue
Block a user