[Issue 18848] New: std.allocator: Regions are non-copyable, yet are passed around in examples

d-bugmail at puremagic.com d-bugmail at puremagic.com
Thu May 10 11:21:07 UTC 2018


https://issues.dlang.org/show_bug.cgi?id=18848

          Issue ID: 18848
           Summary: std.allocator: Regions are non-copyable, yet are
                    passed around in examples
           Product: D
           Version: D2
          Hardware: All
                OS: All
            Status: NEW
          Severity: normal
          Priority: P1
         Component: phobos
          Assignee: nobody at puremagic.com
          Reporter: dlang-bugzilla at thecybershadow.net
                CC: andrei at erdani.com

Here is an example from
std.experimental.allocator.building_blocks.allocator_list.AllocatorList:

// Ouroboros allocator list based upon 4MB regions, fetched directly from
// mmap. All memory is released upon destruction.
alias A1 = AllocatorList!((n) => Region!MmapAllocator(max(n, 1024 * 4096)),
    NullAllocator);

The example features a lambda returning a Region.

However, Regions cannot be copied, as they have a destructor which deallocates
everything. A comment in the implementation says:

    /*
    TODO: The postblit of $(D BasicRegion) should be disabled because such
objects
    should not be copied around naively.
    */

(That's the only occurrence of BasicRegion in Phobos, so I assume that's just
an old name for Region.)

Though NRVO may make the verbatim example code behave correctly, it is fragile,
and small code modifications e.g. to work around issue 18848 can cause
difficult-to-debug problems (due to dangling pointers in other Region
instances).

--


More information about the Digitalmars-d-bugs mailing list