239 lines
27 KiB
HTML
239 lines
27 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="zh" dir="ltr" class="client-nojs" xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh">
|
|
<head><meta http-equiv="x-ua-compatible" content="ie=edge">
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
<title>std::make_shared, std::make_shared_for_overwrite</title>
|
|
<link rel="stylesheet" href="ext.css" />
|
|
<link rel="stylesheet" href="site_modules.css" />
|
|
</head>
|
|
<body class="mediawiki ltr sitedir-ltr ns-0 ns-subject page-cpp_memory_shared_ptr_make_shared skin-cppreference2 action-view cpp-navbar">
|
|
<div id="cpp-content-base">
|
|
<div id="content"><a id="top"></a>
|
|
<h1 id="firstHeading" class="firstHeading"><span style="font-size:0.7em; line-height:130%">std::</span>make_shared, <span style="font-size:0.7em; line-height:130%">std::</span>make_shared_for_overwrite</h1>
|
|
<div id="bodyContent">
|
|
<div id="contentSub"><span class="subpages">< <a href="cpp.html">cpp</a>‎ | <a href="cpp-memory.html">memory</a>‎ | <a href="cpp-memory-shared_ptr.html">shared ptr</a></span></div>
|
|
<div id="mw-content-text" lang="zh" dir="ltr" class="mw-content-ltr" xml:lang="zh">
|
|
<table class="t-dcl-begin">
|
|
<tbody>
|
|
<tr class="t-dsc-header">
|
|
<td>
|
|
<div>定义于头文件 <code><a href="cpp-header-memory.html"><memory></a></code></div>
|
|
</td>
|
|
<td></td>
|
|
<td></td>
|
|
</tr>
|
|
<tr class="t-dcl t-since-cxx11">
|
|
<td>
|
|
<div><span class="mw-geshi cpp source-cpp"><span class="kw1">template</span><span class="sy1"><</span> <span class="kw1">class</span> T, <span class="kw1">class</span>... <span class="me1">Args</span> <span class="sy1">></span><br />
|
|
shared_ptr<span class="sy1"><</span>T<span class="sy1">></span> make_shared<span class="br0">(</span> Args<span class="sy3">&&</span>... <span class="me1">args</span> <span class="br0">)</span><span class="sy4">;</span></span></div>
|
|
</td>
|
|
<td>(1)</td>
|
|
<td><span class="t-mark-rev t-since-cxx11">(C++11 起)</span><br />
|
|
<span class="t-mark">(T 非数组)</span></td>
|
|
</tr>
|
|
<tr class="t-dcl t-since-cxx20">
|
|
<td>
|
|
<div><span class="mw-geshi cpp source-cpp"><span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span><br />
|
|
shared_ptr<span class="sy1"><</span>T<span class="sy1">></span> make_shared<span class="br0">(</span> <a href="cpp-types-size_t.html"><span class="kw100">std::<span class="me2">size_t</span></span></a> N <span class="br0">)</span><span class="sy4">;</span></span></div>
|
|
</td>
|
|
<td>(2)</td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20 起)</span><br />
|
|
<span class="t-mark">(T 为 U[])</span></td>
|
|
</tr>
|
|
<tr class="t-dcl t-since-cxx20">
|
|
<td>
|
|
<div><span class="mw-geshi cpp source-cpp"><span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span><br />
|
|
shared_ptr<span class="sy1"><</span>T<span class="sy1">></span> make_shared<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span></span></div>
|
|
</td>
|
|
<td>(3)</td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20 起)</span><br />
|
|
<span class="t-mark">(T 为 U[N])</span></td>
|
|
</tr>
|
|
<tr class="t-dcl t-since-cxx20">
|
|
<td>
|
|
<div><span class="mw-geshi cpp source-cpp"><span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span><br />
|
|
shared_ptr<span class="sy1"><</span>T<span class="sy1">></span> make_shared<span class="br0">(</span> <a href="cpp-types-size_t.html"><span class="kw100">std::<span class="me2">size_t</span></span></a> N, <span class="kw4">const</span> <a href="cpp-types-remove_extent.html"><span class="kw621">std::<span class="me2">remove_extent_t</span></span></a><span class="sy1"><</span>T<span class="sy1">></span><span class="sy3">&</span> u <span class="br0">)</span><span class="sy4">;</span></span></div>
|
|
</td>
|
|
<td>(4)</td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20 起)</span><br />
|
|
<span class="t-mark">(T 为 U[])</span></td>
|
|
</tr>
|
|
<tr class="t-dcl t-since-cxx20">
|
|
<td>
|
|
<div><span class="mw-geshi cpp source-cpp"><span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span><br />
|
|
shared_ptr<span class="sy1"><</span>T<span class="sy1">></span> make_shared<span class="br0">(</span> <span class="kw4">const</span> <a href="cpp-types-remove_extent.html"><span class="kw621">std::<span class="me2">remove_extent_t</span></span></a><span class="sy1"><</span>T<span class="sy1">></span><span class="sy3">&</span> u <span class="br0">)</span><span class="sy4">;</span></span></div>
|
|
</td>
|
|
<td>(5)</td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20 起)</span><br />
|
|
<span class="t-mark">(T 为 U[N])</span></td>
|
|
</tr>
|
|
<tr class="t-dcl t-since-cxx20">
|
|
<td>
|
|
<div><span class="mw-geshi cpp source-cpp"><span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span><br />
|
|
shared_ptr<span class="sy1"><</span>T<span class="sy1">></span> make_shared_for_overwrite<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span></span></div>
|
|
</td>
|
|
<td>(6)</td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20 起)</span><br />
|
|
<span class="t-mark">(T 非 U[])</span></td>
|
|
</tr>
|
|
<tr class="t-dcl t-since-cxx20">
|
|
<td>
|
|
<div><span class="mw-geshi cpp source-cpp"><span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span><br />
|
|
shared_ptr<span class="sy1"><</span>T<span class="sy1">></span> make_shared_for_overwrite<span class="br0">(</span> <a href="cpp-types-size_t.html"><span class="kw100">std::<span class="me2">size_t</span></span></a> N <span class="br0">)</span><span class="sy4">;</span></span></div>
|
|
</td>
|
|
<td>(7)</td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20 起)</span><br />
|
|
<span class="t-mark">(T 为 U[])</span></td>
|
|
</tr>
|
|
<tr class="t-dcl-sep">
|
|
<td></td>
|
|
<td></td>
|
|
<td></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<div class="t-li1"><span class="t-li">1)</span> 以 <code>args</code> 为 <code>T</code> 的构造函数参数列表,构造 <code>T</code> 类型对象并将它包装于 <span class="t-lc"><a href="cpp-memory-shared_ptr.html">std::shared_ptr</a></span> 。对象如同用表达式 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy4">::</span><span class="me2">new</span> <span class="br0">(</span>pv<span class="br0">)</span> T<span class="br0">(</span><a href="cpp-utility-forward.html"><span class="kw1116">std::<span class="me2">forward</span></span></a><span class="sy1"><</span>Args<span class="sy1">></span><span class="br0">(</span>args<span class="br0">)</span>...<span class="br0">)</span></span></span> 构造,其中 <code>pv</code> 是内部指向适合保有 <code>T</code> 类型对象的存储的 <code>void*</code> 指针。存储典型地大于 <code>sizeof(T)</code> ,以对共享指针控制块和 <code>T</code> 对象使用一次分配。此函数所调用的 <code>std::shared_ptr</code> 构造函数以指向新构造的 <code>T</code> 类型对象指针启用 <code>shared_from_this</code> 。此重载仅若 T 不是数组类型才参与重载决议。</div>
|
|
<div class="t-li1"><span class="t-li">2,3)</span> 同 <span class="t-v">(1)</span> ,但构造的对象是可能多维的数组,其 <code>std::remove_all_extents_t<T></code> 类型的非数组元素如同以布置 new 表达式 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy4">::</span><span class="me2">new</span><span class="br0">(</span>pv<span class="br0">)</span> <a href="cpp-types-remove_all_extents.html"><span class="kw623">std::<span class="me2">remove_all_extents_t</span></span></a><span class="sy1"><</span>T<span class="sy1">></span><span class="br0">(</span><span class="br0">)</span></span></span> 值初始化。重载 <span class="t-v">(2)</span> 创建第一维上大小为 <code>N</code> 的数组。数组元素以其地址递增顺序初始化,而当其生存期结束时,以原本构造顺序的逆序销毁。</div>
|
|
<div class="t-li1"><span class="t-li">4,5)</span> 同 <span class="t-v">(2,3)</span> ,但每个元素从默认值 <code>u</code> 初始化。若 <code>U</code> 不是数组类型,则这如同以如 <span class="t-v">(1)</span> 中的布置 new 表达式进行;否则,这如同以如同 <span class="t-v">(1)</span> 中的布置 new 表达式,从来自 <code>u</code> 的对应元素初始化(可能多维的)数组的每个非数组元素。重载 <span class="t-v">(4)</span> 创建第一维上大小为 <code>N</code> 的数组。数组元素以其地址递增顺序初始化,而当其生存期结束时,以原本构造顺序的逆序销毁。</div>
|
|
<div class="t-li1"><span class="t-li">6)</span> 若 <code>T</code> 不是数组类型则同 <span class="t-v">(1)</span> ,而若 <span class="t-v">(3)</span> 是 <code>U[N]</code> 则同 if <code>T</code> ,除了<a href="cpp-language-default_initialization.html">默认初始化</a>创建的对象。</div>
|
|
<div class="t-li1"><span class="t-li">7)</span> 同 <span class="t-v">(2)</span> ,除了<a href="cpp-language-default_initialization.html">默认初始化</a>单独的数组元素。</div>
|
|
<p>每种情况下,均将用 <span class="t-c"><span class="mw-geshi cpp source-cpp">p<span class="sy2">-</span><span class="sy1">></span>~X<span class="br0">(</span><span class="br0">)</span></span></span> 销毁对象<span class="t-rev-inl t-since-cxx20"><span>(或若 <code>T</code> 为数组类型则为单独的元素)</span> <span><span class="t-mark-rev t-since-cxx20">(C++20 起)</span></span></span>,其中 <code>p</code> 是指向对象的指针,而 <code>X</code> 是该对象的类型。</p>
|
|
<h3><span class="mw-headline" id=".E5.8F.82.E6.95.B0">参数</span></h3>
|
|
<table class="t-par-begin">
|
|
<tr class="t-par">
|
|
<td>args</td>
|
|
<td>-</td>
|
|
<td>将用以构造 <code>T</code> 实例的参数列表。</td>
|
|
</tr>
|
|
<tr class="t-par">
|
|
<td>N</td>
|
|
<td>-</td>
|
|
<td>要使用的数组</td>
|
|
</tr>
|
|
<tr class="t-par">
|
|
<td>u</td>
|
|
<td>-</td>
|
|
<td>初始化数组每个元素的初值</td>
|
|
</tr>
|
|
</table>
|
|
<h3><span class="mw-headline" id=".E8.BF.94.E5.9B.9E.E5.80.BC">返回值</span></h3>
|
|
<p>类型 <code>T</code> 实例的 <span class="t-lc"><a href="cpp-memory-shared_ptr.html">std::shared_ptr</a></span> 。</p>
|
|
<h3><span class="mw-headline" id=".E5.BC.82.E5.B8.B8">异常</span></h3>
|
|
<p>可能抛出 <span class="t-lc"><a href="cpp-memory-new-bad_alloc.html">std::bad_alloc</a></span> 或任何 <code>T</code> 构造函数所抛的异常。若抛出异常,则函数无效果。<span class="t-rev-inl t-since-cxx20"><span>若异常在数组的构造中抛出,则已初始化元素以逆序销毁。</span> <span><span class="t-mark-rev t-since-cxx20">(C++20 起)</span></span></span></p>
|
|
<h3><span class="mw-headline" id=".E6.B3.A8.E8.A7.A3">注解</span></h3>
|
|
<p>此函数可用作 <span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="cpp-memory-shared_ptr.html"><span class="kw734">std::<span class="me2">shared_ptr</span></span></a><span class="sy1"><</span>T<span class="sy1">></span><span class="br0">(</span>new T<span class="br0">(</span>args...<span class="br0">)</span><span class="br0">)</span></span></span> 的替代品。得失是:</p>
|
|
<ul>
|
|
<li><span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="cpp-memory-shared_ptr.html"><span class="kw734">std::<span class="me2">shared_ptr</span></span></a><span class="sy1"><</span>T<span class="sy1">></span><span class="br0">(</span>new T<span class="br0">(</span>args...<span class="br0">)</span><span class="br0">)</span></span></span> 进行至少二次分配(一次为 <code>T</code> 而另一次为共享指针的控制块),而 <span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">make_shared</span><span class="sy1"><</span>T<span class="sy1">></span></span></span> 典型地仅进行一次分配(标准推荐但不要求如此,所有已知实现均如此)。</li>
|
|
<li>若任何 <span class="t-lc"><a href="cpp-memory-weak_ptr.html">std::weak_ptr</a></span> 在所有共享拥有者的生存期结束后引用 <code>std::make_shared</code> 所创建的控制块,则 <code>T</code> 所占有的内存维持着,直至所有弱拥有者亦被销毁,若 <code>sizeof(T)</code> 较大则这可能是不想要的。</li>
|
|
<li><span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="cpp-memory-shared_ptr.html"><span class="kw734">std::<span class="me2">shared_ptr</span></span></a><span class="sy1"><</span>T<span class="sy1">></span><span class="br0">(</span>new T<span class="br0">(</span>args...<span class="br0">)</span><span class="br0">)</span></span></span> 可能调用 <code>T</code> 的非公开构造函数,若在它可访问的语境中执行,而 <code>std::make_shared</code> 要求对被选择构造函数的公开访问。</li>
|
|
<li>不同于 <span class="t-lc"><a href="cpp-memory-shared_ptr.html">std::shared_ptr</a></span> 构造函数, <code>std::make_shared</code> 不允许自定义删除器。</li>
|
|
<li><code>std::make_shared</code> 使用 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy4">::</span><span class="me2">new</span></span></span> ,故若用类特定的 <a href="cpp-memory-new-operator_new.html"><tt>operator new</tt></a> 设置了任何特殊行为,则它将异于 <span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="cpp-memory-shared_ptr.html"><span class="kw734">std::<span class="me2">shared_ptr</span></span></a><span class="sy1"><</span>T<span class="sy1">></span><span class="br0">(</span>new T<span class="br0">(</span>args...<span class="br0">)</span><span class="br0">)</span></span></span> 。</li>
|
|
</ul>
|
|
<table class="t-rev-begin">
|
|
<tr class="t-rev t-until-cxx20">
|
|
<td>
|
|
<ul>
|
|
<li><span class="t-lc"><a href="cpp-memory-shared_ptr.html">std::shared_ptr</a></span> 支持数组类型(从 C++17 起),但 <code>std::make_shared</code> 不支持。 <a rel="nofollow" class="external text" href="http://www.boost.org/doc/libs/1_66_0/libs/smart_ptr/doc/html/smart_ptr.html#make_shared">boost::make_shared</a> 支持此功能。</li>
|
|
</ul>
|
|
</td>
|
|
<td><span class="t-mark-rev t-until-cxx20">(C++20 前)</span></td>
|
|
</tr>
|
|
</table>
|
|
<table class="t-rev-begin">
|
|
<tr class="t-rev t-until-cxx17">
|
|
<td>
|
|
<ul>
|
|
<li>如 <span class="t-c"><span class="mw-geshi cpp source-cpp">f<span class="br0">(</span><a href="cpp-memory-shared_ptr.html"><span class="kw734">std::<span class="me2">shared_ptr</span></span></a><span class="sy1"><</span><span class="kw4">int</span><span class="sy1">></span><span class="br0">(</span>new <span class="kw4">int</span><span class="br0">(</span><span class="nu0">42</span><span class="br0">)</span><span class="br0">)</span>, g<span class="br0">(</span><span class="br0">)</span><span class="br0">)</span></span></span> 的代码可能导致内存泄漏,若 <code>g</code> 在 <code>new int(42)</code> 后得到调用且抛出异常,而 <span class="t-c"><span class="mw-geshi cpp source-cpp">f<span class="br0">(</span>std<span class="sy4">::</span><span class="me2">make_shared</span><span class="sy1"><</span><span class="kw4">int</span><span class="sy1">></span><span class="br0">(</span><span class="nu0">42</span><span class="br0">)</span>, g<span class="br0">(</span><span class="br0">)</span><span class="br0">)</span></span></span> 是安全的,因为二个函数调用<a href="cpp-language-eval_order.html">决不会穿插</a>。</li>
|
|
</ul>
|
|
</td>
|
|
<td><span class="t-mark-rev t-until-cxx17">(C++17 前)</span></td>
|
|
</tr>
|
|
</table>
|
|
<p>构造函数以 <code>U*</code> 类型指针 <code>ptr</code> <i>启用 <code>shared_from_this</code></i> ,表示它确定 <code>U</code> 是否拥有作为 <span class="t-lc"><a href="cpp-memory-enable_shared_from_this.html">std::enable_shared_from_this</a></span> 特化的<span class="t-rev-inl t-since-cxx17"><span>无歧义且可访问</span> <span><span class="t-mark-rev t-since-cxx17">(C++17 起)</span></span></span>基类,而若如此,则构造函数求值该语句:</p>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">if</span> <span class="br0">(</span>ptr <span class="sy3">!</span><span class="sy1">=</span> nullptr <span class="sy3">&&</span> ptr<span class="sy2">-</span><span class="sy1">></span>weak_this.<span class="me1">expired</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span>
|
|
ptr<span class="sy2">-</span><span class="sy1">></span>weak_this <span class="sy1">=</span> <a href="cpp-memory-shared_ptr.html"><span class="kw734">std::<span class="me2">shared_ptr</span></span></a><span class="sy1"><</span><a href="cpp-types-remove_cv.html"><span class="kw597">std::<span class="me2">remove_cv_t</span></span></a><span class="sy1"><</span>U<span class="sy1">>></span><span class="br0">(</span><span class="sy2">*</span>this,
|
|
<span class="kw1">const_cast</span><span class="sy1"><</span><a href="cpp-types-remove_cv.html"><span class="kw597">std::<span class="me2">remove_cv_t</span></span></a><span class="sy1"><</span>U<span class="sy1">></span><span class="sy2">*</span><span class="sy1">></span><span class="br0">(</span>ptr<span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span></pre></div>
|
|
</div>
|
|
<p>其中 <code>weak_this</code> 是 <span class="t-lc">std::shared_from_this</span> 的隐藏 mutable <code>std::weak_ptr</code> 成员。对 <code>weak_this</code> 成员的赋值不是原子的,且与任何到同一对象的潜在并发访问冲突。这确保将来对 <a href="cpp-memory-enable_shared_from_this-shared_from_this.html"><tt>shared_from_this()</tt></a> 调用,将与此裸指针构造函数所创建的 <code>shared_ptr</code> 共享所有权。</p>
|
|
<p>上述解释代码中,测试 <code>ptr->weak_this.expired()</code> 是为确保若 <code>weak_this</code> 指示已有占有者则重赋值它。从 C++17 起要求此测试。</p>
|
|
<h3><span class="mw-headline" id=".E7.A4.BA.E4.BE.8B">示例</span></h3>
|
|
<div class="t-example">
|
|
<div class="t-example-live-link"></div>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="co2">#include <iostream></span>
|
|
<span class="co2">#include <memory></span>
|
|
<span class="co2">#include <type_traits></span>
|
|
|
|
<span class="kw1">struct</span> C
|
|
<span class="br0">{</span>
|
|
C<span class="br0">(</span><span class="kw4">int</span> i<span class="br0">)</span> <span class="sy4">:</span> i<span class="br0">(</span>i<span class="br0">)</span> <span class="br0">{</span><span class="br0">}</span> <span class="co1">// < 需要构造函数 (C++20 前)</span>
|
|
<span class="kw4">int</span> i<span class="sy4">;</span>
|
|
<span class="br0">}</span><span class="sy4">;</span>
|
|
|
|
<span class="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span>
|
|
<span class="br0">{</span>
|
|
<span class="kw4">auto</span> sp <span class="sy1">=</span> std<span class="sy4">::</span><span class="me2">make_shared</span><span class="sy1"><</span>C<span class="sy1">></span><span class="br0">(</span><span class="nu0">12</span><span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
static_assert<span class="br0">(</span><a href="cpp-types-is_same.html"><span class="kw589">std::<span class="me2">is_same_v</span></span></a><span class="sy1"><</span>decltype<span class="br0">(</span>sp<span class="br0">)</span>, <a href="cpp-memory-shared_ptr.html"><span class="kw734">std::<span class="me2">shared_ptr</span></span></a><span class="sy1"><</span>C<span class="sy1">>></span><span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<a href="cpp-io-cout.html"><span class="kw1757">std::<span class="me2">cout</span></span></a> <span class="sy1"><<</span> sp<span class="sy2">-</span><span class="sy1">></span>i <span class="sy1"><<</span> <span class="st0">'<span class="es1">\n</span>'</span><span class="sy4">;</span>
|
|
<span class="br0">}</span></pre></div>
|
|
</div>
|
|
<p>输出:</p>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="text source-text">
|
|
<pre class="de1">12</pre></div>
|
|
</div>
|
|
</div>
|
|
<h3><span class="mw-headline" id=".E5.8F.82.E9.98.85">参阅</span></h3>
|
|
<table class="t-dsc-begin">
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div t-dsc-member-nobold-div">
|
|
<div><a href="cpp-memory-shared_ptr-shared_ptr.html"><span class="t-lines"><span>(构造函数)</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>构造新的 <code>shared_ptr</code><br />
|
|
<span class="t-mark">(公开成员函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-memory-shared_ptr-allocate_shared.html"><span class="t-lines"><span>allocate_shared</span><span>allocate_shared_for_overwrite</span></span></a></div>
|
|
<div><span class="t-lines"><span></span><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>创建管理一个用分配器分配的新对象的共享指针<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-memory-unique_ptr-make_unique.html"><span class="t-lines"><span>make_unique</span><span>make_unique_for_overwrite</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx14">(C++14)</span></span><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>创建管理一个新对象的独占指针<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-memory-new-operator_new.html"><span class="t-lines"><span>operator new</span><span>operator new[]</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>分配函数<br />
|
|
<span class="t-mark">(函数)</span></td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="visualClear"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html>
|