mirror of
https://github.com/CnTransGroup/EffectiveModernCppChinese.git
synced 2024-12-29 14:30:46 +08:00
deploy: 199be3f507
This commit is contained in:
parent
2bdba41ffc
commit
d6077d2b9c
@ -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>
|
||||
|
@ -2901,7 +2901,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/../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
Loading…
Reference in New Issue
Block a user