This commit is contained in:
y1yang0 2024-07-10 09:47:38 +00:00
parent 2bdba41ffc
commit d6077d2b9c
4 changed files with 4 additions and 4 deletions

View File

@ -198,7 +198,7 @@ std::shared_ptr<Widget> spw2(new Widget); //不使用make函数
<p>一次分配足矣。这是因为<code>std::make_shared</code>分配一块内存,同时容纳了<code>Widget</code>对象和控制块。这种优化减少了程序的静态大小,因为代码只包含一个内存分配调用,并且它提高了可执行代码的速度,因为内存只分配一次。此外,使用<code>std::make_shared</code>避免了对控制块中的某些簿记信息的需要,潜在地减少了程序的总内存占用。</p>
<p>对于<code>std::make_shared</code>的效率分析同样适用于<code>std::allocate_shared</code>,因此<code>std::make_shared</code>的性能优势也扩展到了该函数。</p>
<p>更倾向于使用<code>make</code>函数而不是直接使用<code>new</code>的争论非常激烈。尽管它们在软件工程、异常安全和效率方面具有优势,但本条款的建议是,更<strong>倾向于</strong>使用<code>make</code>函数,而不是完全依赖于它们。这是因为有些情况下它们不能或不应该被使用。</p>
<p>例如,<code>make</code>函数都不允许指定自定义删除器(见<a href="../4.SmartPointers/item18.html">Item18</a><a href="../4.SmartPointers/item19.html">19</a>),但是<code>std::unique_ptr</code><code>std::shared_ptr</code>有构造函数这么做。有个<code>Widget</code>的自定义删除器:</p>
<p>例如,<code>make</code>函数都不允许指定自定义删除器(见<a href="../4.SmartPointers/item18.html">Item18</a><a href="../4.SmartPointers/item19.html">19</a>),但是<code>std::unique_ptr</code><code>std::shared_ptr</code>的构造函数可以接收一个删除器参数。有个<code>Widget</code>的自定义删除器:</p>
<pre><code class="language-cpp">auto widgetDeleter = [](Widget* pw) { … };
</code></pre>
<p>创建一个使用它的智能指针只能直接使用<code>new</code></p>

View File

@ -2901,7 +2901,7 @@ std::shared_ptr&lt;Widget&gt; spw2(new Widget); //不使用make函数
<p>一次分配足矣。这是因为<code>std::make_shared</code>分配一块内存,同时容纳了<code>Widget</code>对象和控制块。这种优化减少了程序的静态大小,因为代码只包含一个内存分配调用,并且它提高了可执行代码的速度,因为内存只分配一次。此外,使用<code>std::make_shared</code>避免了对控制块中的某些簿记信息的需要,潜在地减少了程序的总内存占用。</p>
<p>对于<code>std::make_shared</code>的效率分析同样适用于<code>std::allocate_shared</code>,因此<code>std::make_shared</code>的性能优势也扩展到了该函数。</p>
<p>更倾向于使用<code>make</code>函数而不是直接使用<code>new</code>的争论非常激烈。尽管它们在软件工程、异常安全和效率方面具有优势,但本条款的建议是,更<strong>倾向于</strong>使用<code>make</code>函数,而不是完全依赖于它们。这是因为有些情况下它们不能或不应该被使用。</p>
<p>例如,<code>make</code>函数都不允许指定自定义删除器(见<a href="4.SmartPointers/../4.SmartPointers/item18.html">Item18</a><a href="4.SmartPointers/../4.SmartPointers/item19.html">19</a>),但是<code>std::unique_ptr</code><code>std::shared_ptr</code>有构造函数这么做。有个<code>Widget</code>的自定义删除器:</p>
<p>例如,<code>make</code>函数都不允许指定自定义删除器(见<a href="4.SmartPointers/../4.SmartPointers/item18.html">Item18</a><a href="4.SmartPointers/../4.SmartPointers/item19.html">19</a>),但是<code>std::unique_ptr</code><code>std::shared_ptr</code>的构造函数可以接收一个删除器参数。有个<code>Widget</code>的自定义删除器:</p>
<pre><code class="language-cpp">auto widgetDeleter = [](Widget* pw) { … };
</code></pre>
<p>创建一个使用它的智能指针只能直接使用<code>new</code></p>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long