170 lines
12 KiB
HTML
170 lines
12 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::experimental::scope_fail</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_experimental_scope_fail skin-cppreference2 action-view cpp-page-template 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::experimental::</span>scope_fail</h1>
|
|
<div id="bodyContent">
|
|
<div id="contentSub"><span class="subpages">< <a href="cpp.html">cpp</a>‎ | <a href="cpp-experimental.html">experimental</a></span></div>
|
|
<div id="mw-content-text" lang="zh" dir="ltr" class="mw-content-ltr" xml:lang="zh">
|
|
<div class="t-page-template" style="">
|
|
<p></p>
|
|
</div>
|
|
<table class="t-dcl-begin">
|
|
<tbody>
|
|
<tr class="t-dsc-header">
|
|
<td>
|
|
<div>定义于头文件 <code><a href="https://zh.cppreference.com/mwiki/index.php?title=cpp/header/experimental/scope&action=edit&redlink=1" class="new" title="cpp/header/experimental/scope(页面不存在)"><experimental/scope></a></code></div>
|
|
</td>
|
|
<td></td>
|
|
<td></td>
|
|
</tr>
|
|
<tr class="t-dcl t-since-libfund_ts_3">
|
|
<td>
|
|
<div><span class="mw-geshi cpp source-cpp"><span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> EF<span class="sy1">></span><br />
|
|
<span class="kw1">class</span> scope_fail<span class="sy4">;</span></span></div>
|
|
</td>
|
|
<td class="t-dcl-nopad"></td>
|
|
<td><span class="t-mark-rev t-since-libfund-ts-3 t-mark-ts">(库基础 TS v3)</span></td>
|
|
</tr>
|
|
<tr class="t-dcl-sep">
|
|
<td></td>
|
|
<td></td>
|
|
<td></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>类模板 <code>scope_fail</code> 是通用的作用域防护,有意使它在经由异常退出作用域时调用其退出函数。</p>
|
|
<p><code>scope_fail</code> 非<a href="cpp-named_req-CopyConstructible.html"><span style="font-style:italic">可复制构造</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(CopyConstructible)</span></a> 、<a href="cpp-named_req-CopyAssignable.html"><span style="font-style:italic">可复制赋值</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(CopyAssignable)</span></a> 或<a href="cpp-named_req-MoveAssignable.html"><span style="font-style:italic">可移动赋值</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(MoveAssignable)</span></a> ,然而若 <code>EF</code> 满足某些要求则它可能为<a href="cpp-named_req-MoveConstructible.html"><span style="font-style:italic">可移动构造</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(MoveConstructible)</span></a> ,这允许包装 <code>scope_fail</code> 到另一对象中。</p>
|
|
<p><code>scope_fail</code> 可为活跃,即在析构时调用其退出函数,或为不活跃,即在析构时不做任何事。在从退出函数构造后 <code>scope_fail</code> 为活跃。</p>
|
|
<p><code>scope_fail</code> 能因手动或自动(由移动构造函数)在它上调用 <span class="t-lc">release()</span> 后变得不活跃。亦可由从另一不活跃的 <code>scope_fail</code> 初始化获得不活跃的 <code>scope_fail</code> 。一旦 <code>scope_fail</code> 不活跃,则它不能再次变得活跃。</p>
|
|
<p>一个 <code>scope_fail</code> 等效地保有一个 <code>EF</code> 与一个指示它是否活跃的 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">bool</span></span></span> 标签,还有一个用于检测是否在栈回溯期间调用析构函数的未捕捉异常的计数器。</p>
|
|
<h3><span class="mw-headline" id=".E6.A8.A1.E6.9D.BF.E5.BD.A2.E5.8F.82">模板形参</span></h3>
|
|
<table class="t-par-begin">
|
|
<tr class="t-par">
|
|
<td>EF</td>
|
|
<td>-</td>
|
|
<td>退出函数的类型</td>
|
|
</tr>
|
|
<tr class="t-par-hitem">
|
|
<td colspan="3">类型要求</td>
|
|
</tr>
|
|
<tr class="t-par-req">
|
|
<td colspan="3">-
|
|
<div class="spacer"></div>
|
|
<code>EF</code> 可为:
|
|
<ul>
|
|
<li><a href="cpp-named_req-Destructible.html"><span style="font-style:italic">可析构</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(Destructible)</span></a> 的<a href="cpp-named_req-FunctionObject.html"><span style="font-style:italic">函数对象</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(FunctionObject)</span></a> 类型</li>
|
|
<li>到<a href="cpp-named_req-FunctionObject.html"><span style="font-style:italic">函数对象</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(FunctionObject)</span></a> 的左值引用</li>
|
|
<li>到函数的左值引用</li>
|
|
</ul>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-par-req">
|
|
<td colspan="3">-
|
|
<div class="spacer"></div>
|
|
以无参数调用 <span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="cpp-types-remove_reference.html"><span class="kw607">std::<span class="me2">remove_reference_t</span></span></a><span class="sy1"><</span>EF<span class="sy1">></span></span></span> 的左值必须为良构。</td>
|
|
</tr>
|
|
</table>
|
|
<h3><span class="mw-headline" id=".E6.88.90.E5.91.98.E5.87.BD.E6.95.B0">成员函数</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-experimental-scope_fail-scope_fail.html"><span class="t-lines"><span>(构造函数)</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>构造新的 <code>scope_fail</code><br />
|
|
<span class="t-mark">(公开成员函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div t-dsc-member-nobold-div">
|
|
<div><a href="cpp-experimental-scope_fail-~scope_fail.html"><span class="t-lines"><span>(析构函数)</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>在经由异常退出作用域时调用退出函数,若 <code>scope_fail</code> 为活跃,然后销毁 <code>scope_fail</code><br />
|
|
<span class="t-mark">(公开成员函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><span class="t-lines"><span>operator=</span></span></div>
|
|
<div><span class="t-lines"><span><span class="t-cmark">[被删除]</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><code>scope_fail</code> 不可赋值<br />
|
|
<span class="t-mark">(公开成员函数)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<h5><span class="mw-headline" id=".E4.BF.AE.E6.94.B9.E5.99.A8">修改器</span></h5>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-experimental-scope_fail-release.html"><span class="t-lines"><span>release</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>使 <code>scope_fail</code> 不活跃<br />
|
|
<span class="t-mark">(公开成员函数)</span></td>
|
|
</tr>
|
|
</table>
|
|
<h3><span class="mw-headline" id=".E6.8E.A8.E5.AF.BC.E6.8C.87.E5.BC.95"><a href="cpp-experimental-scope_fail-deduction_guides.html">推导指引</a></span></h3>
|
|
<h3><span class="mw-headline" id=".E6.B3.A8.E8.A7.A3">注解</span></h3>
|
|
<p>构造拥有动态存储期的 <code>scope_fail</code> 可能导致不期待的行为。</p>
|
|
<p>从创建于另一线程的 <code>scope_fail</code> 构造 <code>scope_fail</code> 亦可能导致不期待的行为,因为可能在析构期间比较从另一线程获得的未捕捉异常计数。</p>
|
|
<h3><span class="mw-headline" id=".E7.A4.BA.E4.BE.8B">示例</span></h3>
|
|
<table class="metadata plainlinks ambox mbox-small-left ambox-notice" style="">
|
|
<tr>
|
|
<td class="mbox-empty-cell"></td>
|
|
<td class="mbox-text" style="">本节未完成<br />
|
|
原因:暂无示例</td>
|
|
</tr>
|
|
</table>
|
|
<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">
|
|
<div><a href="cpp-experimental-scope_exit.html"><span class="t-lines"><span>scope_exit</span></span></a></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-experimental-scope_success.html"><span class="t-lines"><span>scope_success</span></span></a></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-default_delete.html"><span class="t-lines"><span>default_delete</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><code>unique_ptr</code> 的默认删除器<br />
|
|
<span class="t-mark">(类模板)</span></td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="visualClear"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html>
|