SmartRef: The Smart Pointer In D

Dsby via Digitalmars-d-announce digitalmars-d-announce at puremagic.com
Sun Jan 15 17:54:35 PST 2017


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.


More information about the Digitalmars-d-announce mailing list