Can't I allocate at descontructor?

Jack jckj33 at gmail.com
Fri Mar 5 20:57:37 UTC 2021


On Friday, 5 March 2021 at 20:28:58 UTC, Ali Çehreli wrote:
> On 3/5/21 12:24 PM, Jack wrote:
>
>> Are there some kind of replacement or I have to make my own 
>> finalize-like method, once I determine somewhat the 
>> application no longer need those resources?
>
> destroy() executes the destructor.

but I would need to call it manually and only after I somewhat 
I've determined I no longer need the resources, right? so 
destroy(c) would be no different from calling my own 
finalize-like method like freeResources()?

> To my surprise, even though 'c' is not null below, the 
> destructor is not executed multiple times.
>
> import std.stdio;
>
> class C {
>   string fileName;
>
>   this(string fileName) {
>     writeln("constructing");
>     this.fileName = fileName;
>     writeln("creating file");
>   }
>
>   ~this() {
>     writeln("destructing");
>     if (fileName) {
>       writeln("removing the file");
>
>     } else {
>       writeln("NOT removing the file");
>     }
>   }
> }
>
> void main() {
>   auto c = new C("some imaginary file name");
>
>   // Executes the destructor
>   destroy(c);
>
>   // This does not do anything
>   destroy(c);
>
>   // Neither does this
>   import core.memory;
>   GC.collect();
> }
>
> Ali




More information about the Digitalmars-d-learn mailing list