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