Stop writeln from calling object destructor

Paul Backus snarwin at gmail.com
Sun Oct 2 16:44:25 UTC 2022


On Sunday, 2 October 2022 at 16:21:47 UTC, data pulverizer wrote:
> I've noticed that `writeln` calls the destructor of a struct 
> multiple times and would like to know how to stop this from 
> happening.

It's because `writeln` is copying the object, and each of the 
copies is being destroyed. If you add a copy constructor to your 
example, you can see it happening:

```d
import std.stdio: writeln;

struct MyObject
{
     int id;
     this(int id) @nogc
     {
         this.id = id;
     }
     this(inout ref MyObject) inout
     {
         writeln("Object copy constructor...");
     }
     ~this()
     {
         writeln("Object destructor ...");
     }
}



void main()
{
     auto obj = MyObject(42);
     writeln(obj);
     writeln("Goodbye:\n");
}
```

Output:

```d
Object copy constructor...
Object copy constructor...
Object copy constructor...
Object copy constructor...
MyObject(0)Object destructor ...
Object destructor ...

Object destructor ...
Object destructor ...
Goodbye:

Object destructor ...
```


More information about the Digitalmars-d-learn mailing list