Sophie

Sophie

distrib > Mageia > 6 > armv7hl > media > core-updates > by-pkgid > 564935689ab5527f955e5449ded02799 > files > 1679

rust-doc-1.19.0-1.mga6.armv7hl.rpm

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="generator" content="rustdoc">
    <meta name="description" content="API documentation for the Rust `ManuallyDrop` union in crate `core`.">
    <meta name="keywords" content="rust, rustlang, rust-lang, ManuallyDrop">

    <title>core::mem::ManuallyDrop - Rust</title>

    <link rel="stylesheet" type="text/css" href="../../normalize.css">
    <link rel="stylesheet" type="text/css" href="../../rustdoc.css">
    <link rel="stylesheet" type="text/css" href="../../main.css">
    

    <link rel="shortcut icon" href="https://doc.rust-lang.org/favicon.ico">
    
</head>
<body class="rustdoc union">
    <!--[if lte IE 8]>
    <div class="warning">
        This old browser is unsupported and will most likely display funky
        things.
    </div>
    <![endif]-->

    

    <nav class="sidebar">
        <a href='../../core/index.html'><img src='https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png' alt='logo' width='100'></a>
        <p class='location'>Union ManuallyDrop</p><div class="block items"><ul><li><a href="#methods">Methods</a></li><li><a href="#implementations">Trait Implementations</a></li></ul></div><p class='location'><a href='../index.html'>core</a>::<wbr><a href='index.html'>mem</a></p><script>window.sidebarCurrent = {name: 'ManuallyDrop', ty: 'union', relpath: ''};</script><script defer src="sidebar-items.js"></script>
    </nav>

    <nav class="sub">
        <form class="search-form js-only">
            <div class="search-container">
                <input class="search-input" name="search"
                       autocomplete="off"
                       placeholder="Click or press ‘S’ to search, ‘?’ for more options…"
                       type="search">
            </div>
        </form>
    </nav>

    <section id='main' class="content">
<h1 class='fqn'><span class='in-band'>Union <a href='../index.html'>core</a>::<wbr><a href='index.html'>mem</a>::<wbr><a class="union" href=''>ManuallyDrop</a></span><span class='out-of-band'><span class='since' title='Stable since Rust version '></span><span id='render-detail'>
                   <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">
                       [<span class='inner'>&#x2212;</span>]
                   </a>
               </span><a class='srclink' href='../../src/core/mem.rs.html#830' title='goto source code'>[src]</a></span></h1>
<pre class='rust union'>pub union ManuallyDrop&lt;T&gt; {
    // some fields omitted
}</pre><div class='stability'><div class='stab unstable'><span class=microscope>🔬</span> This is a nightly-only experimental API.  (<code>manually_drop </code><a href="https://github.com/rust-lang/rust/issues/40673">#40673</a>)</div></div><div class='docblock'><p>A wrapper to inhibit compiler from automatically calling <code>T</code>’s destructor.</p>

<p>This wrapper is 0-cost.</p>

<h1 id='examples' class='section-header'><a href='#examples'>Examples</a></h1>
<p>This wrapper helps with explicitly documenting the drop order dependencies between fields of
the type:</p>

<pre class="rust rust-example-rendered">
<span class="kw">use</span> <span class="ident">std</span>::<span class="ident">mem</span>::<span class="ident">ManuallyDrop</span>;
<span class="kw">struct</span> <span class="ident">Peach</span>;
<span class="kw">struct</span> <span class="ident">Banana</span>;
<span class="kw">struct</span> <span class="ident">Melon</span>;
<span class="kw">struct</span> <span class="ident">FruitBox</span> {
    <span class="comment">// Immediately clear there’s something non-trivial going on with these fields.</span>
    <span class="ident">peach</span>: <span class="ident">ManuallyDrop</span><span class="op">&lt;</span><span class="ident">Peach</span><span class="op">&gt;</span>,
    <span class="ident">melon</span>: <span class="ident">Melon</span>, <span class="comment">// Field that’s independent of the other two.</span>
    <span class="ident">banana</span>: <span class="ident">ManuallyDrop</span><span class="op">&lt;</span><span class="ident">Banana</span><span class="op">&gt;</span>,
}

<span class="kw">impl</span> <span class="ident">Drop</span> <span class="kw">for</span> <span class="ident">FruitBox</span> {
    <span class="kw">fn</span> <span class="ident">drop</span>(<span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>) {
        <span class="kw">unsafe</span> {
            <span class="comment">// Explicit ordering in which field destructors are run specified in the intuitive</span>
            <span class="comment">// location – the destructor of the structure containing the fields.</span>
            <span class="comment">// Moreover, one can now reorder fields within the struct however much they want.</span>
            <span class="ident">ManuallyDrop</span>::<span class="ident">drop</span>(<span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>.<span class="ident">peach</span>);
            <span class="ident">ManuallyDrop</span>::<span class="ident">drop</span>(<span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>.<span class="ident">banana</span>);
        }
        <span class="comment">// After destructor for `FruitBox` runs (this function), the destructor for Melon gets</span>
        <span class="comment">// invoked in the usual manner, as it is not wrapped in `ManuallyDrop`.</span>
    }
}<a class="test-arrow" target="_blank" href="https://play.rust-lang.org/?code=%23!%5Bfeature(manually_drop)%5D%0Afn%20main()%20%7B%0Ause%20std%3A%3Amem%3A%3AManuallyDrop%3B%0Astruct%20Peach%3B%0Astruct%20Banana%3B%0Astruct%20Melon%3B%0Astruct%20FruitBox%20%7B%0A%20%20%20%20%2F%2F%20Immediately%20clear%20there%E2%80%99s%20something%20non-trivial%20going%20on%20with%20these%20fields.%0A%20%20%20%20peach%3A%20ManuallyDrop%3CPeach%3E%2C%0A%20%20%20%20melon%3A%20Melon%2C%20%2F%2F%20Field%20that%E2%80%99s%20independent%20of%20the%20other%20two.%0A%20%20%20%20banana%3A%20ManuallyDrop%3CBanana%3E%2C%0A%7D%0A%0Aimpl%20Drop%20for%20FruitBox%20%7B%0A%20%20%20%20fn%20drop(%26mut%20self)%20%7B%0A%20%20%20%20%20%20%20%20unsafe%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Explicit%20ordering%20in%20which%20field%20destructors%20are%20run%20specified%20in%20the%20intuitive%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20location%20%E2%80%93%20the%20destructor%20of%20the%20structure%20containing%20the%20fields.%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Moreover%2C%20one%20can%20now%20reorder%20fields%20within%20the%20struct%20however%20much%20they%20want.%0A%20%20%20%20%20%20%20%20%20%20%20%20ManuallyDrop%3A%3Adrop(%26mut%20self.peach)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20ManuallyDrop%3A%3Adrop(%26mut%20self.banana)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%2F%2F%20After%20destructor%20for%20%60FruitBox%60%20runs%20(this%20function)%2C%20the%20destructor%20for%20Melon%20gets%0A%20%20%20%20%20%20%20%20%2F%2F%20invoked%20in%20the%20usual%20manner%2C%20as%20it%20is%20not%20wrapped%20in%20%60ManuallyDrop%60.%0A%20%20%20%20%7D%0A%7D%0A%7D&amp;version=nightly">Run</a></pre>
</div><h2 id='methods'>Methods</h2><h3 class='impl'><span class='in-band'><code>impl&lt;T&gt; <a class="union" href="../../core/mem/union.ManuallyDrop.html" title="union core::mem::ManuallyDrop">ManuallyDrop</a>&lt;T&gt;</code></span><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../../src/core/mem.rs.html#832-878' title='goto source code'>[src]</a></span></h3>
<div class='impl-items'><h4 id='method.new' class="method"><span id='new.v' class='invisible'><code>fn <a href='#method.new' class='fnname'>new</a>(value: T) -&gt; <a class="union" href="../../core/mem/union.ManuallyDrop.html" title="union core::mem::ManuallyDrop">ManuallyDrop</a>&lt;T&gt;</code></span></h4>
<div class='stability'><div class='stab unstable'><span class=microscope>🔬</span> This is a nightly-only experimental API.  (<code>manually_drop </code><a href="https://github.com/rust-lang/rust/issues/40673">#40673</a>)</div></div><div class='docblock'><p>Wrap a value to be manually dropped.</p>

<h1 id='examples-1' class='section-header'><a href='#examples-1'>Examples</a></h1>
<pre class="rust rust-example-rendered">
<span class="kw">use</span> <span class="ident">std</span>::<span class="ident">mem</span>::<span class="ident">ManuallyDrop</span>;
<span class="ident">ManuallyDrop</span>::<span class="ident">new</span>(<span class="ident">Box</span>::<span class="ident">new</span>(()));<a class="test-arrow" target="_blank" href="https://play.rust-lang.org/?code=%23!%5Bfeature(manually_drop)%5D%0Afn%20main()%20%7B%0Ause%20std%3A%3Amem%3A%3AManuallyDrop%3B%0AManuallyDrop%3A%3Anew(Box%3A%3Anew(()))%3B%0A%7D&amp;version=nightly">Run</a></pre>
</div><h4 id='method.into_inner' class="method"><span id='into_inner.v' class='invisible'><code>fn <a href='#method.into_inner' class='fnname'>into_inner</a>(slot: <a class="union" href="../../core/mem/union.ManuallyDrop.html" title="union core::mem::ManuallyDrop">ManuallyDrop</a>&lt;T&gt;) -&gt; T</code></span></h4>
<div class='stability'><div class='stab unstable'><span class=microscope>🔬</span> This is a nightly-only experimental API.  (<code>manually_drop </code><a href="https://github.com/rust-lang/rust/issues/40673">#40673</a>)</div></div><div class='docblock'><p>Extract the value from the ManuallyDrop container.</p>

<h1 id='examples-2' class='section-header'><a href='#examples-2'>Examples</a></h1>
<pre class="rust rust-example-rendered">
<span class="kw">use</span> <span class="ident">std</span>::<span class="ident">mem</span>::<span class="ident">ManuallyDrop</span>;
<span class="kw">let</span> <span class="ident">x</span> <span class="op">=</span> <span class="ident">ManuallyDrop</span>::<span class="ident">new</span>(<span class="ident">Box</span>::<span class="ident">new</span>(()));
<span class="kw">let</span> _: <span class="ident">Box</span><span class="op">&lt;</span>()<span class="op">&gt;</span> <span class="op">=</span> <span class="ident">ManuallyDrop</span>::<span class="ident">into_inner</span>(<span class="ident">x</span>);<a class="test-arrow" target="_blank" href="https://play.rust-lang.org/?code=%23!%5Bfeature(manually_drop)%5D%0Afn%20main()%20%7B%0Ause%20std%3A%3Amem%3A%3AManuallyDrop%3B%0Alet%20x%20%3D%20ManuallyDrop%3A%3Anew(Box%3A%3Anew(()))%3B%0Alet%20_%3A%20Box%3C()%3E%20%3D%20ManuallyDrop%3A%3Ainto_inner(x)%3B%0A%7D&amp;version=nightly">Run</a></pre>
</div><h4 id='method.drop' class="method"><span id='drop.v' class='invisible'><code>unsafe fn <a href='#method.drop' class='fnname'>drop</a>(slot: &amp;mut <a class="union" href="../../core/mem/union.ManuallyDrop.html" title="union core::mem::ManuallyDrop">ManuallyDrop</a>&lt;T&gt;)</code></span></h4>
<div class='stability'><div class='stab unstable'><span class=microscope>🔬</span> This is a nightly-only experimental API.  (<code>manually_drop </code><a href="https://github.com/rust-lang/rust/issues/40673">#40673</a>)</div></div><div class='docblock'><p>Manually drops the contained value.</p>

<h1 id='unsafety' class='section-header'><a href='#unsafety'>Unsafety</a></h1>
<p>This function runs the destructor of the contained value and thus the wrapped value
now represents uninitialized data. It is up to the user of this method to ensure the
uninitialized data is not actually used.</p>
</div></div><h2 id='implementations'>Trait Implementations</h2><h3 class='impl'><span class='in-band'><code>impl&lt;T&gt; <a class="trait" href="../../core/ops/trait.Deref.html" title="trait core::ops::Deref">Deref</a> for <a class="union" href="../../core/mem/union.ManuallyDrop.html" title="union core::mem::ManuallyDrop">ManuallyDrop</a>&lt;T&gt;</code></span><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../../src/core/mem.rs.html#881-889' title='goto source code'>[src]</a></span></h3>
<div class='impl-items'><h4 id='associatedtype.Target' class="type"><span id='Target.t' class='invisible'><code>type <a href='../../core/ops/trait.Deref.html#associatedtype.Target' class="type">Target</a> = T</code></span></h4>
<div class='docblock'><p>The resulting type after dereferencing</p>
</div><h4 id='method.deref' class="method"><span id='deref.v' class='invisible'><code>fn <a href='../../core/ops/trait.Deref.html#tymethod.deref' class='fnname'>deref</a>(&amp;self) -&gt; &amp;Self::<a class="trait" href="../../core/ops/trait.Deref.html" title="trait core::ops::Deref">Target</a></code></span></h4>
<div class='docblock'><p>The method called to dereference a value</p>
</div></div><h3 class='impl'><span class='in-band'><code>impl&lt;T&gt; <a class="trait" href="../../core/ops/trait.DerefMut.html" title="trait core::ops::DerefMut">DerefMut</a> for <a class="union" href="../../core/mem/union.ManuallyDrop.html" title="union core::mem::ManuallyDrop">ManuallyDrop</a>&lt;T&gt;</code></span><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../../src/core/mem.rs.html#892-899' title='goto source code'>[src]</a></span></h3>
<div class='impl-items'><h4 id='method.deref_mut' class="method"><span id='deref_mut.v' class='invisible'><code>fn <a href='../../core/ops/trait.DerefMut.html#tymethod.deref_mut' class='fnname'>deref_mut</a>(&amp;mut self) -&gt; &amp;mut Self::<a class="trait" href="../../core/ops/trait.Deref.html" title="trait core::ops::Deref">Target</a></code></span></h4>
<div class='docblock'><p>The method called to mutably dereference a value</p>
</div></div><h3 class='impl'><span class='in-band'><code>impl&lt;T:&nbsp;<a class="trait" href="../../core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a>&gt; <a class="trait" href="../../core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a> for <a class="union" href="../../core/mem/union.ManuallyDrop.html" title="union core::mem::ManuallyDrop">ManuallyDrop</a>&lt;T&gt;</code></span><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../../src/core/mem.rs.html#902-908' title='goto source code'>[src]</a></span></h3>
<div class='impl-items'><h4 id='method.fmt' class="method"><span id='fmt.v' class='invisible'><code>fn <a href='../../core/fmt/trait.Debug.html#tymethod.fmt' class='fnname'>fmt</a>(&amp;self, fmt: &amp;mut <a class="struct" href="../../core/fmt/struct.Formatter.html" title="struct core::fmt::Formatter">Formatter</a>) -&gt; <a class="type" href="../../core/fmt/type.Result.html" title="type core::fmt::Result">Result</a></code></span></h4>
<div class='docblock'><p>Formats the value using the given formatter.</p>
</div></div></section>
    <section id='search' class="content hidden"></section>

    <section class="footer"></section>

    <aside id="help" class="hidden">
        <div>
            <h1 class="hidden">Help</h1>

            <div class="shortcuts">
                <h2>Keyboard Shortcuts</h2>

                <dl>
                    <dt>?</dt>
                    <dd>Show this help dialog</dd>
                    <dt>S</dt>
                    <dd>Focus the search field</dd>
                    <dt>&larrb;</dt>
                    <dd>Move up in search results</dd>
                    <dt>&rarrb;</dt>
                    <dd>Move down in search results</dd>
                    <dt>&#9166;</dt>
                    <dd>Go to active search result</dd>
                    <dt>+</dt>
                    <dd>Collapse/expand all sections</dd>
                </dl>
            </div>

            <div class="infos">
                <h2>Search Tricks</h2>

                <p>
                    Prefix searches with a type followed by a colon (e.g.
                    <code>fn:</code>) to restrict the search to a given type.
                </p>

                <p>
                    Accepted types are: <code>fn</code>, <code>mod</code>,
                    <code>struct</code>, <code>enum</code>,
                    <code>trait</code>, <code>type</code>, <code>macro</code>,
                    and <code>const</code>.
                </p>

                <p>
                    Search functions by type signature (e.g.
                    <code>vec -> usize</code> or <code>* -> vec</code>)
                </p>
            </div>
        </div>
    </aside>

    

    <script>
        window.rootPath = "../../";
        window.currentCrate = "core";
    </script>
    <script src="../../main.js"></script>
    <script defer src="../../search-index.js"></script>
</body>
</html>