This should make things clearer for you: unittest { auto h1 = get(1); auto h2 = get(2); assert(h1 is h2); // both reference the same array } Field initialization is only done once (once per thread, or if a field is shared once on app start) and not each time you call the constructor.