Unique!struct bug - Re: unique_ptr | Unique for autoclose handle

Ali Çehreli acehreli at yahoo.com
Thu Dec 15 20:12:12 UTC 2022


On 12/15/22 11:31, Nick Treleaven wrote:
 > On Wednesday, 14 December 2022 at 17:41:07 UTC, Ali Çehreli wrote:
 >> I've never used Unique but I think it has a bug (or a design issue?):
 >> Its destructor is the following:
 >>
 >>     ~this()
 >>     {
 >>         if (_p !is null)
 >>         {
 >>             destroy(_p);
 >>             _p = null;
 >>         }
 >>     }
 >>
 >> Because _p is a pointer, destroy(_p) will not dereference and destroy
 >> what it points to. I think this is a bug with Unique. I think it
 >> should do
 >>
 >>   destroy(*_p);
 >
 > Now filed:
 > https://issues.dlang.org/show_bug.cgi?id=23561

Thanks. I was hoping others more experienced with Phobos implementation 
chime in. But to me, the intention is to destroy the object. One never 
wants to destroy a pointer as there is no operation there.

As a minor proud moment, I do cover this issue:

   http://ddili.org/ders/d.en/memory.html#ix_memory.destroy

 > Do you think it's OK to just fix this or

I think this is a bug because the documentation clearly talks about 
destroying the object:

   https://dlang.org/library/std/typecons/unique.html

"When a Unique!T goes out of scope it will call destroy on the
resource T that it manages, unless it is transferred. One
important consequence of destroy is that it will call the
destructor of the resource T."

 >  do we need to do some kind of deprecation?

The behavior is so different from the intention that I don't think 
anybody is using Unique anyway. :o)

Ali



More information about the Digitalmars-d-learn mailing list