On Wednesday, 28 May 2014 at 07:13:37 UTC, BlackEdder wrote:
I'm trying to write a thin wrapper around redblacktree, but it seems every object of the class shares the same copy of redblacktree. Am I doing something wrong or is this a bug.

Minimal code example:

import std.array;
import std.container;
import std.stdio;

class A {
    auto tree = new RedBlackTree!string();
}

unittest {
    auto a = new A();
    a.tree.insert( "a" );
    auto b = new A();
    writeln( "Should be empty, but is: ", b.tree.array );
writeln( "Should be empty, but has length: ", b.tree.length );
}

Which results in the following output:
$ rdmd -unittest rbt.d
Should be empty, but is: ["a"]
Should be empty, but has length: 1


I'm using dmd 2.0.65.

Have you tried

class A {
  RedBlackTree!(string) tree;
  this() {
    tree = new RedBlackTree!string();
  }
}

Maybe in your implementation all instances of class A share the same underlying instance RedBlackTree, or class RedBlackTree was designed as a singleton (which would seem odd to me).

PS This question would be better suited for the "D learn" forum.

Reply via email to