1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<meta name="robots" content="none">
<title>Disposable< T > Class Template Reference</title>
<link rel="stylesheet" href="quantlib.css" type="text/css">
<link rel="stylesheet" href="print.css" type="text/css" media="print">
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
<link rel="icon" href="favicon.ico" type="image/x-icon">
</head>
<body>
<div id="container">
<div id="header">
<img class="titleimage"
src="QL-title.jpg" width="185" height="50" border="0"
alt="QuantLib">
<br>
<h3 class="subtitle">A free/open-source library for quantitative finance</h3>
</div>
<div id="menu">
<h3 class="navbartitle">Version 1.2</h3>
<hr>
<h3 class="navbartitle">Getting started</h3>
<ul class="navbarlist">
<li class="navlink"><a href="index.html">Introduction</a></li>
<li class="navlink"><a href="where.html">Where to get QuantLib</a></li>
<li class="navlink"><a href="install.html">Installation</a></li>
<li class="navlink"><a href="config.html">Configuration</a></li>
<li class="navlink"><a href="usage.html">Usage</a></li>
<li class="navlink"><a href="history.html">Version history</a></li>
<li class="navlink"><a href="resources.html">Additional resources</a></li>
<li class="navlink"><a href="group.html">The QuantLib group</a></li>
<li class="navlink"><a href="license.html">Copyright and license</a></li>
</ul>
<hr>
<h3 class="navbartitle">Reference manual</h3>
<ul class="navbarlist">
<li class="navlink"><a href="modules.html">Modules</a></li>
<li class="navlink"><a href="hierarchy.html">Class Hierarchy</a></li>
<li class="navlink"><a href="annotated.html">Compound List</a></li>
<li class="navlink"><a href="files.html">File List</a></li>
<li class="navlink"><a href="functions.html">Compound Members</a></li>
<li class="navlink"><a href="globals.html">File Members</a></li>
<li class="navlink"><a href="todo.html">Todo List</a></li>
<li class="navlink"><a href="bug.html">Known Bugs</a></li>
<li class="navlink"><a href="caveats.html">Caveats</a></li>
<li class="navlink"><a href="test.html">Test Suite</a></li>
<li class="navlink"><a href="examples.html">Examples</a></li>
</ul>
</div>
<div id="content">
<!--Doxygen-generated content-->
<!-- Generated by Doxygen 1.7.6.1 -->
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><b>QuantLib</b> </li>
<li class="navelem"><a class="el" href="class_quant_lib_1_1_disposable.html">Disposable</a> </li>
</ul>
</div>
</div>
<div class="header">
<div class="summary">
<a href="#pub-methods">Public Member Functions</a> </div>
<div class="headertitle">
<div class="title">Disposable< T > Class Template Reference</div> </div>
</div><!--header-->
<div class="contents">
<!-- doxytag: class="QuantLib::Disposable" --><!-- doxytag: inherits="T" -->
<p>generic disposable object with move semantics
<a href="class_quant_lib_1_1_disposable.html#details">More...</a></p>
<p><code>#include <ql/utilities/disposable.hpp></code></p>
<p>Inherits T.</p>
<p><a href="class_quant_lib_1_1_disposable-members.html">List of all members.</a></p>
<table class="memberdecls">
<tr><td colspan="2"><h2><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab538a1e5ad0d5028c1fa92f4d849dc3f"></a><!-- doxytag: member="QuantLib::Disposable::Disposable" ref="ab538a1e5ad0d5028c1fa92f4d849dc3f" args="(T &t)" -->
 </td><td class="memItemRight" valign="bottom"><b>Disposable</b> (T &t)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4e34b6d01a65daf06beaa13b266c1459"></a><!-- doxytag: member="QuantLib::Disposable::Disposable" ref="a4e34b6d01a65daf06beaa13b266c1459" args="(const Disposable< T > &t)" -->
 </td><td class="memItemRight" valign="bottom"><b>Disposable</b> (const <a class="el" href="class_quant_lib_1_1_disposable.html">Disposable</a>< T > &t)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a62e578457d50f2dfccc17ba03ebd94de"></a><!-- doxytag: member="QuantLib::Disposable::operator=" ref="a62e578457d50f2dfccc17ba03ebd94de" args="(const Disposable< T > &t)" -->
<a class="el" href="class_quant_lib_1_1_disposable.html">Disposable</a>< T > & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="class_quant_lib_1_1_disposable.html">Disposable</a>< T > &t)</td></tr>
</table>
<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
<div class="textblock"><h3>template<class T><br/>
class QuantLib::Disposable< T ></h3>
<p>generic disposable object with move semantics </p>
<p>This class can be used for returning a value by copy. It relies on the returned object exposing a <code>swap(T&)</code> method through which the copy constructor and assignment operator are implemented, thus resulting in actual move semantics. Typical use of this class is along the following lines: </p>
<div class="fragment"><pre class="fragment"> Disposable<Foo> bar(<a class="code" href="group__types.html#gab9c87440c314438e51a899a03d2442d0" title="integer number">Integer</a> i) {
Foo f(i*2);
<span class="keywordflow">return</span> f;
}
</pre></div><dl class="caveats"><dt><b><a class="el" href="caveats.html#_caveats000151">Warning:</a></b></dt><dd>In order to avoid copies in code such as shown above, the conversion from <code>T</code> to <code><a class="el" href="class_quant_lib_1_1_disposable.html" title="generic disposable object with move semantics">Disposable</a><T></code> is destructive, i.e., it does <b>not</b> preserve the state of the original object. Therefore, it is necessary for the developer to avoid code such as </dd></dl>
<div class="fragment"><pre class="fragment"> Disposable<Foo> bar(Foo& f) {
<span class="keywordflow">return</span> f;
}
</pre></div><p> which would likely render the passed object unusable. The correct way to obtain the desired behavior would be: </p>
<div class="fragment"><pre class="fragment"> Disposable<Foo> bar(Foo& f) {
Foo temp = f;
<span class="keywordflow">return</span> temp;
}
</pre></div> </div></div><!-- contents -->
</div>
<div class="footer">
<div class="endmatter">
Documentation generated by
<a href="http://www.doxygen.org">Doxygen</a> 1.7.6.1
</div>
</div>
</div>
</body>
</html>
|