forked from boostorg/smart_ptr
Design notes updated.
[SVN r14575]
This commit is contained in:
@ -196,7 +196,29 @@ void bad()
|
||||
<P><EM>[This constructor has been changed to a template in order to remember the actual
|
||||
pointer type passed. The destructor will call <STRONG>delete</STRONG> with the
|
||||
same pointer, complete with its original type, even when <STRONG>T</STRONG> does
|
||||
not have a virtual destructor, or is <STRONG>void</STRONG>.]</EM></P>
|
||||
not have a virtual destructor, or is <STRONG>void</STRONG>.</EM></P>
|
||||
<P><EM>In the current implementation, if <STRONG>p</STRONG> is convertible to <STRONG>counted_base
|
||||
*</STRONG>, <STRONG>shared_ptr</STRONG> will use the embedded reference
|
||||
count supplied by <STRONG>counted_base</STRONG>. This is an (experimental)
|
||||
attempt to provide a way for <STRONG>shared_ptr</STRONG> to be constructed from
|
||||
a raw pointer such as <STRONG>this</STRONG>. A free function <STRONG>shared_from_this(q)</STRONG>
|
||||
performs the conversion when <STRONG>q</STRONG> is convertible to <STRONG>counted_base
|
||||
const *</STRONG>.</EM></P>
|
||||
<P><EM>The optional intrusive counting employed by the current implementation allows <STRONG>
|
||||
shared_ptr</STRONG> to interoperate with <STRONG>intrusive_ptr</STRONG>, an
|
||||
experimental generic intrusive-counted smart pointer.</EM></P>
|
||||
<P><EM> Another possible implementation is to use a global pointer-to-count map instead
|
||||
of intrusive counting. <STRONG>shared_from_this</STRONG> would no longer be
|
||||
O(1), which is a concern for some users, although I do not expect any
|
||||
performance problems, since the operation is rare. Maintaining a global
|
||||
map is difficult; it needs to be initialized before any <STRONG>shared_ptr</STRONG>
|
||||
instances are constructed, and the initialization needs to be thread safe.
|
||||
In addition, under the Windows dynamic library model, it is possible for
|
||||
several maps to exist.</EM></P>
|
||||
<P><EM> It is not yet clear which implementation should be used, or whether the
|
||||
specification should allow both; nevertheless, the ability to make a <STRONG>shared_ptr</STRONG>
|
||||
from <STRONG>this</STRONG> is considered essential by experienced smart
|
||||
pointer users.</EM><EM>]</EM></P>
|
||||
<pre>template<typename Y, typename D> shared_ptr(Y * p, D d);</pre>
|
||||
<blockquote>
|
||||
<p><b>Requirements:</b> <B>p</B> must be convertible to <B>T *</B>. The copy
|
||||
@ -605,7 +627,8 @@ int * p = a.release();
|
||||
implementation or a linked list implementation, or some other specific
|
||||
implementation. This is not the intent.</p>
|
||||
<hr>
|
||||
<p>Revised <!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B %Y" startspan -->23 July 2002<!--webbot bot="Timestamp" i-checksum="38439" endspan --></p>
|
||||
<p>Revised <!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B %Y" startspan -->
|
||||
23 July 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
|
||||
|
Reference in New Issue
Block a user