Thanks for the info, ketmar.

By the way, what do you guys think of adding @nogc to structs, in which case they cannot be instantiated by the GC?

e.g.,

@nogc struct S {...}
auto s = new S(); // does not compile
S s;              // all is well


-tomer

On Monday, 10 November 2014 at 08:28:03 UTC, ketmar via Digitalmars-d wrote:
On Mon, 10 Nov 2014 08:10:08 +0000
Tomer Filiba via Digitalmars-d <[email protected]> wrote:

The following code does not invoke S.~this. If I change `struct S` to `class S` - it does. Memory consumption remains constant, meaning memory is collected, but destructors are not called.

import std.stdio;
import std.conv;

struct S {
     string s;

     ~this() {
         writeln("~S");
     }
}

void main() {
     auto i = 0;
     S[] arr;

     while (true) {
         arr ~= S("hello " ~ text(i++));
         if (arr.length == 1_000_000) {
             writeln(&arr[8888], " = ", arr[8888].s);
             arr.length = 0;
         }
     }
}


Is it a bug? How can I effectively implement RAII with this behavior?
it's a bug, it was recently filled and Walter (afair) made a PR with
fix, but it's not yet merged.

Any workaround for this?
made your own array implementation which manually calls dtors. or wait
for next DMD release with this bug fixed. ;-)

Reply via email to