Skip to content

Commit 13297a5

Browse files
author
cpprefjp-autoupdate
committed
update automatically
1 parent f8f6b18 commit 13297a5

File tree

3 files changed

+170
-669
lines changed

3 files changed

+170
-669
lines changed

reference/memory/unique_ptr/op_constructor.html

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@
6868

6969
</head>
7070
<body>
71-
<header data-kunai-mdinfo="{&#34;meta&#34;: {&#34;header&#34;: [&#34;memory&#34;], &#34;namespace&#34;: [&#34;std&#34;], &#34;class&#34;: [&#34;unique_ptr&#34;], &#34;id-type&#34;: [&#34;function&#34;], &#34;cpp&#34;: [&#34;cpp11&#34;]}, &#34;sources&#34;: [{&#34;id&#34;: &#34;3547e3ebf875d18f8de266f4bab7fc855acc689a&#34;, &#34;source&#34;: &#34;#include &lt;cassert&gt;\n#include &lt;memory&gt;\n\nint main()\n{\n // (1) \u30c7\u30d5\u30a9\u30eb\u30c8\u69cb\u7bc9\n // \u6240\u6709\u6a29\u3092\u6301\u305f\u306a\u3044\u3001\u7a7a\u306eunique_ptr\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u69cb\u7bc9\u3059\u308b\n std::unique_ptr&lt;int&gt; p1;\n assert(!p1);\n\n // (2) \u751f\u30dd\u30a4\u30f3\u30bf\u304b\u3089\u6240\u6709\u6a29\u3092\u8b72\u6e21\u3057\u3066\u69cb\u7bc9\n std::unique_ptr&lt;int&gt; p2(new int(3));\n assert(p2);\n\n // (3), (4) \u751f\u30dd\u30a4\u30f3\u30bf\u304b\u3089\u6240\u6709\u6a29\u3092\u8b72\u6e21\u3057\u3001\u30c7\u30ea\u30fc\u30bf\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3068\u3068\u3082\u306b\u69cb\u7bc9\n std::unique_ptr&lt;int&gt; p3(new int(3), std::default_delete&lt;int&gt;());\n assert(p3);\n\n // (5) \u4ed6\u306eunique_ptr\u304b\u3089\u6240\u6709\u6a29\u3092\u8b72\u6e21\u3059\u308b\n std::unique_ptr&lt;int&gt; p5 = std::move(p3);\n assert(*p5 == 3);\n\n // (6) nullptr\u3067\u69cb\u7bc9\n // \u30c7\u30d5\u30a9\u30eb\u30c8\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf(1)\u3068\u540c\u3058\n std::unique_ptr&lt;int&gt; p6 = nullptr;\n assert(!p6);\n\n // (7) \u5909\u63db\u53ef\u80fd\u306a\u4ed6\u306eunique_ptr\u304b\u3089\u6240\u6709\u6a29\u3092\u8b72\u6e21\u3059\u308b\n std::unique_ptr&lt;const int&gt; p7 = std::move(p5);\n assert(*static_cast&lt;const int*&gt;(p7.get()) == 3);\n}\n&#34;}], &#34;page_id&#34;: [&#34;reference&#34;, &#34;memory&#34;, &#34;unique_ptr&#34;, &#34;op_constructor&#34;]}">
71+
<header data-kunai-mdinfo="{&#34;meta&#34;: {&#34;header&#34;: [&#34;memory&#34;], &#34;namespace&#34;: [&#34;std&#34;], &#34;class&#34;: [&#34;unique_ptr&#34;], &#34;id-type&#34;: [&#34;function&#34;], &#34;cpp&#34;: [&#34;cpp11&#34;]}, &#34;sources&#34;: [{&#34;id&#34;: &#34;09049231575567a450967337a28b67e2e949e857&#34;, &#34;source&#34;: &#34;#include &lt;cassert&gt;\n#include &lt;memory&gt;\n\nusing AllocTraits = std::allocator_traits&lt;std::allocator&lt;int&gt;&gt;;\n\nclass Deleter {\n public:\n explicit Deleter(const std::allocator&lt;int&gt;&amp; alloc) : alloc_(alloc) {}\n\n void operator()(int* p) {\n AllocTraits::destroy(alloc_, p);\n AllocTraits::deallocate(alloc_, p, 1);\n }\n private:\n std::allocator&lt;int&gt; alloc_;\n};\n\nint main()\n{\n // (1) \u30c7\u30d5\u30a9\u30eb\u30c8\u69cb\u7bc9\n // \u6240\u6709\u6a29\u3092\u6301\u305f\u306a\u3044\u3001\u7a7a\u306eunique_ptr\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u69cb\u7bc9\u3059\u308b\n std::unique_ptr&lt;int&gt; p1;\n assert(!p1);\n\n // (2) \u751f\u30dd\u30a4\u30f3\u30bf\u304b\u3089\u6240\u6709\u6a29\u3092\u8b72\u6e21\u3057\u3066\u69cb\u7bc9\n std::unique_ptr&lt;int&gt; p2(new int(3));\n assert(p2);\n\n // (3), (4) \u751f\u30dd\u30a4\u30f3\u30bf\u304b\u3089\u6240\u6709\u6a29\u3092\u8b72\u6e21\u3057\u3001\u30c7\u30ea\u30fc\u30bf\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3068\u3068\u3082\u306b\u69cb\u7bc9\n std::unique_ptr&lt;int&gt; p3(new int(3), std::default_delete&lt;int&gt;());\n assert(p3);\n\n // \u81ea\u4f5c\u30c7\u30ea\u30fc\u30bf\u3092\u4f7f\u3063\u305f\u4f8b\n {\n std::allocator&lt;int&gt; alloc;\n int* p = AllocTraits::allocate(alloc, 1);\n AllocTraits::construct(alloc, p, 4);\n std::unique_ptr&lt;int, Deleter&gt; p4(p, Deleter(alloc));\n assert(p4);\n assert(*p4 == 4);\n }\n\n // (5) \u4ed6\u306eunique_ptr\u304b\u3089\u6240\u6709\u6a29\u3092\u8b72\u6e21\u3059\u308b\n std::unique_ptr&lt;int&gt; p5 = std::move(p3);\n assert(*p5 == 3);\n\n // (6) nullptr\u3067\u69cb\u7bc9\n // \u30c7\u30d5\u30a9\u30eb\u30c8\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf(1)\u3068\u540c\u3058\n std::unique_ptr&lt;int&gt; p6 = nullptr;\n assert(!p6);\n\n // (7) \u5909\u63db\u53ef\u80fd\u306a\u4ed6\u306eunique_ptr\u304b\u3089\u6240\u6709\u6a29\u3092\u8b72\u6e21\u3059\u308b\n std::unique_ptr&lt;const int&gt; p7 = std::move(p5);\n assert(*static_cast&lt;const int*&gt;(p7.get()) == 3);\n}\n&#34;}], &#34;page_id&#34;: [&#34;reference&#34;, &#34;memory&#34;, &#34;unique_ptr&#34;, &#34;op_constructor&#34;]}">
7272
<nav class="navbar navbar-default" role="navigation">
7373
<div class="container-fluid">
7474
<div class="navbar-header">
@@ -200,12 +200,12 @@
200200

201201
<p class="text-right"><small>
202202
最終更新日時(UTC):
203-
<span itemprop="datePublished" content="2024-06-11T13:45:38">
204-
2024年06月11日 13時45分38秒
203+
<span itemprop="datePublished" content="2024-07-17T08:21:31">
204+
2024年07月17日 08時21分31秒
205205
</span>
206206
<br/>
207207
<span itemprop="author" itemscope itemtype="http://schema.org/Person">
208-
<span itemprop="name">Akira Takahashi</span>
208+
<span itemprop="name">Yuya Asano</span>
209209
</span>
210210
が更新
211211
</small></p>
@@ -339,9 +339,23 @@ <h2>備考</h2>
339339
</code></pre></div>
340340
</p>
341341
<h2></h2>
342-
<p><div class="yata" id="3547e3ebf875d18f8de266f4bab7fc855acc689a"><div class="codehilite"><pre><span></span><code><span class="cp">#include</span> <span class="cpf"><a href="../../cassert.html">&lt;cassert&gt;</a></span><span class="cp"></span>
342+
<p><div class="yata" id="09049231575567a450967337a28b67e2e949e857"><div class="codehilite"><pre><span></span><code><span class="cp">#include</span> <span class="cpf"><a href="../../cassert.html">&lt;cassert&gt;</a></span><span class="cp"></span>
343343
<span class="cp">#include</span> <span class="cpf"><a href="../../memory.html">&lt;memory&gt;</a></span><span class="cp"></span>
344344

345+
<span class="k">using</span> <span class="n">AllocTraits</span> <span class="o">=</span> <span class="n"><a href="../allocator_traits.html">std::allocator_traits</a></span><span class="o">&lt;</span><span class="n"><a href="../allocator.html">std::allocator</a></span><span class="o">&lt;</span><span class="kt">int</span><span class="o">&gt;&gt;</span><span class="p">;</span>
346+
347+
<span class="k">class</span> <span class="nc">Deleter</span> <span class="p">{</span>
348+
<span class="k">public</span><span class="o">:</span>
349+
<span class="k">explicit</span> <span class="n">Deleter</span><span class="p">(</span><span class="k">const</span> <span class="n"><a href="../allocator.html">std::allocator</a></span><span class="o">&lt;</span><span class="kt">int</span><span class="o">&gt;&amp;</span> <span class="n">alloc</span><span class="p">)</span> <span class="o">:</span> <span class="n">alloc_</span><span class="p">(</span><span class="n">alloc</span><span class="p">)</span> <span class="p">{}</span>
350+
351+
<span class="kt">void</span> <span class="k">operator</span><span class="p">()(</span><span class="kt">int</span><span class="o">*</span> <span class="n">p</span><span class="p">)</span> <span class="p">{</span>
352+
<span class="n">AllocTraits</span><span class="o">::</span><span class="n"><a href="../allocator_traits/destroy.html">destroy</a></span><span class="p">(</span><span class="n">alloc_</span><span class="p">,</span> <span class="n">p</span><span class="p">);</span>
353+
<span class="n">AllocTraits</span><span class="o">::</span><span class="n"><a href="../allocator_traits/deallocate.html">deallocate</a></span><span class="p">(</span><span class="n">alloc_</span><span class="p">,</span> <span class="n">p</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
354+
<span class="p">}</span>
355+
<span class="k">private</span><span class="o">:</span>
356+
<span class="n"><a href="../allocator.html">std::allocator</a></span><span class="o">&lt;</span><span class="kt">int</span><span class="o">&gt;</span> <span class="n">alloc_</span><span class="p">;</span>
357+
<span class="p">};</span>
358+
345359
<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span>
346360
<span class="p">{</span>
347361
<span class="c1">// (1) デフォルト構築</span>
@@ -357,6 +371,16 @@ <h2>例</h2>
357371
<span class="n"><a href="../unique_ptr.html">std::unique_ptr</a></span><span class="o">&lt;</span><span class="kt">int</span><span class="o">&gt;</span> <span class="n">p3</span><span class="p">(</span><span class="k">new</span> <span class="kt">int</span><span class="p">(</span><span class="mi">3</span><span class="p">),</span> <span class="n"><a href="../default_delete.html">std::default_delete</a></span><span class="o">&lt;</span><span class="kt">int</span><span class="o">&gt;</span><span class="p">());</span>
358372
<span class="n"><a href="../../cassert/assert.html">assert</a></span><span class="p">(</span><span class="n">p3</span><span class="p">);</span>
359373

374+
<span class="c1">// 自作デリータを使った例</span>
375+
<span class="p">{</span>
376+
<span class="n"><a href="../allocator.html">std::allocator</a></span><span class="o">&lt;</span><span class="kt">int</span><span class="o">&gt;</span> <span class="n">alloc</span><span class="p">;</span>
377+
<span class="kt">int</span><span class="o">*</span> <span class="n">p</span> <span class="o">=</span> <span class="n">AllocTraits</span><span class="o">::</span><span class="n"><a href="../allocator_traits/allocate.html">allocate</a></span><span class="p">(</span><span class="n">alloc</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
378+
<span class="n">AllocTraits</span><span class="o">::</span><span class="n"><a href="../allocator_traits/construct.html">construct</a></span><span class="p">(</span><span class="n">alloc</span><span class="p">,</span> <span class="n">p</span><span class="p">,</span> <span class="mi">4</span><span class="p">);</span>
379+
<span class="n"><a href="../unique_ptr.html">std::unique_ptr</a></span><span class="o">&lt;</span><span class="kt">int</span><span class="p">,</span> <span class="n">Deleter</span><span class="o">&gt;</span> <span class="n">p4</span><span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="n">Deleter</span><span class="p">(</span><span class="n">alloc</span><span class="p">));</span>
380+
<span class="n"><a href="../../cassert/assert.html">assert</a></span><span class="p">(</span><span class="n">p4</span><span class="p">);</span>
381+
<span class="n"><a href="../../cassert/assert.html">assert</a></span><span class="p">(</span><span class="o">*</span><span class="n">p4</span> <span class="o">==</span> <span class="mi">4</span><span class="p">);</span>
382+
<span class="p">}</span>
383+
360384
<span class="c1">// (5) 他のunique_ptrから所有権を譲渡する</span>
361385
<span class="n"><a href="../unique_ptr.html">std::unique_ptr</a></span><span class="o">&lt;</span><span class="kt">int</span><span class="o">&gt;</span> <span class="n">p5</span> <span class="o">=</span> <span class="n"><a href="../../utility/move.html">std::move</a></span><span class="p">(</span><span class="n">p3</span><span class="p">);</span>
362386
<span class="n"><a href="../../cassert/assert.html">assert</a></span><span class="p">(</span><span class="o">*</span><span class="n">p5</span> <span class="o">==</span> <span class="mi">3</span><span class="p">);</span>

0 commit comments

Comments
 (0)