$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r81430 - trunk/libs/smart_ptr
From: glenfe_at_[hidden]
Date: 2012-11-19 22:00:03
Author: glenfe
Date: 2012-11-19 22:00:02 EST (Mon, 19 Nov 2012)
New Revision: 81430
URL: http://svn.boost.org/trac/boost/changeset/81430
Log:
Update documentation for make_shared and allocate_shared array forms.
Text files modified: 
   trunk/libs/smart_ptr/make_shared_array.html |    79 ++++++++++++++++++++++++++++++++++----- 
   1 files changed, 68 insertions(+), 11 deletions(-)
Modified: trunk/libs/smart_ptr/make_shared_array.html
==============================================================================
--- trunk/libs/smart_ptr/make_shared_array.html	(original)
+++ trunk/libs/smart_ptr/make_shared_array.html	2012-11-19 22:00:02 EST (Mon, 19 Nov 2012)
@@ -12,12 +12,14 @@
       <A href="#Synopsis">Synopsis</A><br>
       <A href="#functions">Free Functions</A><br>
       <A href="#example">Example</A><br>
+      History<br>
     <h2><a name="Introduction">Introduction</a></h2>
-    <p>One criticism of Boost shared_array is 
-      the lack of utility similar to make_shared 
-      which ensures only a single allocation for an array. A second criticism 
-      is Boost <code>shared_array</code> does not support custom allocators 
-      and so also lacks an <code>allocate_shared</code> utility.</p>
+    <p>Originally the Boost function templates <code>make_shared</code> and 
+      <code>allocate_shared</code> were for efficient allocation of single 
+      objects only. There was a need to have efficient, single, allocation of 
+      arrays. One criticism of shared_array was 
+      always the lack of a make_shared utility 
+      which ensures only a single allocation for an array.</p>
     <p>The header files <boost/smart_ptr/make_shared_array.hpp> and 
       <boost/smart_ptr/allocate_shared_array.hpp> provide new function 
       templates, <code>make_shared</code> and <code>allocate_shared</code>, 
@@ -55,10 +57,10 @@
     shared_ptr<T[N]> make_shared(initializer_list<T> list);
     
     template<typename T, typename... Args>
-    shared_ptr<T[][N]> make_shared(size_t size, initializer_list<T> list);
+    shared_ptr<T[][N]> make_shared(size_t size, initializer_list<T[N]> list);
     
     template<typename T, typename... Args>
-    shared_ptr<T[M][N]> make_shared(initializer_list<T> list);
+    shared_ptr<T[M][N]> make_shared(initializer_list<T[N]> list);
 
     template<typename T, typename A, typename... Args>
     shared_ptr<T[]> allocate_shared(const A& allocator, initializer_list<T> list);
@@ -67,10 +69,10 @@
     shared_ptr<T[N]> allocate_shared(const A& allocator, initializer_list<T> list);
     
     template<typename T, typename A, typename... Args>
-    shared_ptr<T[][N]> allocate_shared(const A& allocator, size_t size, initializer_list<T> list);
+    shared_ptr<T[][N]> allocate_shared(const A& allocator, size_t size, initializer_list<T[N]> list);
     
     template<typename T, typename A, typename... Args>
-    shared_ptr<T[M][N]> allocate_shared(const A& allocator, initializer_list<T> list);
+    shared_ptr<T[M][N]> allocate_shared(const A& allocator, initializer_list<T[N]> list);
 #endif
 
     template<typename T>
@@ -81,9 +83,9 @@
 }</pre>
     <h2><a name="functions">Free Functions</a></h2>
     <pre>template<typename T, typename... Args>
-    shared_ptr<T> make_shared(size_t size, Args&&... args);
+    shared_ptr<T[]> make_shared(size_t size, Args&&... args);
 template<typename T, typename A, typename... Args>
-    shared_ptr<T> allocate_shared(const A& allocator, size_t size, Args&&... args);</pre>
+    shared_ptr<T[]> allocate_shared(const A& allocator, size_t size, Args&&... args);</pre>
     <blockquote>
       <p><b>Requires:</b> The expression 
         <code>new(pointer) T(forward<Args>(args)...)</code>, where 
@@ -122,6 +124,58 @@
         take any constructor arguments. These overloads invoke the default 
         constructor of <code>T</code> for each array element.</p>
     </blockquote>
+    <pre>template<typename T, typename... Args>
+    shared_ptr<T[N]> make_shared(Args&&... args);
+template<typename T, typename A, typename... Args>
+    shared_ptr<T[N]> allocate_shared(const A& allocator, Args&&... args);</pre>
+    <blockquote>
+      <p><b>Description:</b> These overloads of the utilities above are for a 
+        fixed size array.</p>
+    </blockquote>
+    <pre>template<typename T, typename... Args>
+    shared_ptr<T[]> make_shared(initializer_list<T> list);
+template<typename T, typename A, typename... Args>
+    shared_ptr<T[]> allocate_shared(const A& allocator, initializer_list<T> list);</pre>
+    <blockquote>
+      <p><b>Description:</b> These overloads initialize the array elements 
+        from the initializer list.</p>
+    </blockquote>
+    <pre>template<typename T, typename... Args>
+    shared_ptr<T[N]> make_shared(initializer_list<T> list);
+template<typename T, typename A, typename... Args>
+    shared_ptr<T[N]> allocate_shared(const A& allocator, initializer_list<T> list);</pre>
+    <blockquote>
+      <p><b>Description:</b> These overloads of the utilities above are for a 
+        fixed size array.</p>
+    </blockquote>
+    <pre>template<typename T, typename... Args>
+    shared_ptr<T[][N]> make_shared(size_t size, initializer_list<T[N]> list);
+template<typename T, typename A, typename... Args>
+    shared_ptr<T[][N]> allocate_shared(const A& allocator, size_t size, initializer_list<T[N]> list);</pre>
+    <blockquote>
+      <p><b>Description:</b> These overloads initialize inner array elements 
+        from the initializer list.</p>
+    </blockquote>
+    <pre>template<typename T, typename... Args>
+    shared_ptr<T[M][N]> make_shared(initializer_list<T[N]> list);
+template<typename T, typename A, typename... Args>
+    shared_ptr<T[M][N]> allocate_shared(const A& allocator, initializer_list<T[N]> list);</pre>
+    <blockquote>
+      <p><b>Description:</b> These overloads of the utilities above are for a 
+        fixed size array.</p>
+    </blockquote>
+    <pre>template<typename T>
+    shared_ptr<T[]> make_shared_noinit(size_t size);</pre>
+    <blockquote>
+      <p><b>Description:</b> This overload does not perform value 
+        initialization of elements.</p>
+    </blockquote>
+    <pre>template<typename T>
+    shared_ptr<T[N]> make_shared_noinit();</pre>
+    <blockquote>
+      <p><b>Description:</b> This overload of the utility above is used for a 
+        fixed size array.</p>
+    </blockquote>
     <h2><a name="example">Example</a></h2>
     <p>An example of each overload of make_shared for arrays:</p>
     <blockquote>
@@ -135,6 +189,9 @@
 boost::shared_ptr<int[]> a8 = boost::make_shared_noinit<int[]>(size);
 boost::shared_ptr<int[5]> a9 = boost::make_shared_noinit<int[5]>();</pre>
     </blockquote>
+    <h2><a name="history">History</a></h2>
+    <p>November 2012. Glen Fernandes contributed implementations of 
+      make_shared and allocate_shared for arrays.</p>
     <hr>
     <p>$Date: 2012-10-30 10:12:25 -0800 (Tue, 30 Oct 2012) $</p>
     <p><small>Copyright 2012 Glen Fernandes. Distributed under the Boost