On Sunday, 15 January 2017 at 17:24:25 UTC, biozic wrote:
On Sunday, 15 January 2017 at 15:56:30 UTC, Dsby wrote:
and : In https://github.com/dlang/phobos/blob/master/std/typecons.d#L147
    ~this()
    {
debug(Unique) writeln("Unique destructor of ", (_p is null)? null: _p);
        if (_p !is null) destroy(_p);
        _p = null;
}
if the 'T' is a struct, it will not exec the Destory function. Is it a bug?


What do you mean? This works for me:
---
import std.stdio, std.typecons;

struct Foo {
    ~this() {
        writeln("I'm destroyed");
    }
}

void main() {
    Unique!Foo foo = new Foo;
} // Prints "I'm destroyed"
---

the "writeln("I'm destroyed");" not run the ~this in the Unique destroy function.
it run in the app exit , THe GC distroy all memony.
it example can show :
import std.stdio;
import std.typecons;

 struct Foo {
     ~this() {
         writeln("I'm destroyed");
     }
 }

 void fun(){
    Unique!Foo foo = new Foo;
    writeln("exit the fun.");
 }

 void main() {
     fun();
      writeln("exit the Main.");
 }

It is the printf:
~/tmp  rdmd ./type.d 2017年01月16日 星期一 09时50分00秒
exit the fun.
exit the Main.
I'm destroyed
 ~/tmp 

if you use the struct in Unique, the struct's Destory function is not run in the Unique destroy, it is also run in the GC collet.
I think it is not the Unique should be.

Reply via email to