Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Yes it is the correct behavior.</p> <p>§20.7.1.2.2[unique.ptr.single.dtor]/2:</p> <blockquote> <h3><code>unique_ptr</code> destructor</h3> <p><em>Effects</em>: If <code>get() == nullptr</code> there are no effects. Otherwise <code>get_deleter()(get())</code>.</p> </blockquote> <p>§20.7.2.2.2[util.smartptr.shared.dest]/1:</p> <blockquote> <h3><code>shared_ptr</code> destructor</h3> <p><em>Effects</em>:</p> <ul> <li>If <code>*this</code> is <em>empty</em> or shares ownership with another <code>shared_ptr</code> instance (<code>use_count() &gt; 1</code>), there are no side effects.</li> <li>Otherwise, if <code>*this</code> <em>owns</em> an object <code>p</code> and a deleter <code>d</code>, <code>d(p)</code> is called.</li> <li>Otherwise, <code>*this</code> <em>owns</em> a pointer <code>p</code>, and delete <code>p</code> is called.</li> </ul> </blockquote> <p>So there should be no effect since the shared_ptr is empty? Wrong, because providing the a pointer makes the shared_ptr <em>not</em> empty, even if the pointer is null.</p> <p>§20.7.2.2.1[util.smartptr.shared.const]/8–10</p> <blockquote> <p><code>shared_ptr</code> constructors</p> <pre><code>template&lt;class Y, class D&gt; shared_ptr(Y* p, D d); template&lt;class Y, class D, class A&gt; shared_ptr(Y* p, D d, A a); template &lt;class D&gt; shared_ptr(nullptr_t p, D d); template &lt;class D, class A&gt; shared_ptr(nullptr_t p, D d, A a); </code></pre> <p><em>Requires:</em> <code>p</code> shall be convertible to <code>T*</code>. …</p> <p><em>Effects:</em> Constructs a <code>shared_ptr</code> object that <em>owns</em> the object <code>p</code> and the deleter <code>d</code>.</p> <p><em>Postconditions:</em> <code>use_count() == 1 &amp;&amp; get() == p</code>.</p> </blockquote> <p>This means the shared_ptr <em>owns</em> the nullptr. Thus the deleter will be called when the shared_ptr is destroyed.</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload