Skip to content

std.allocator: Regions are non-copyable, yet are passed around in examples #10334

Open
@dlangBugzillaToGithub

Description

@dlangBugzillaToGithub

dlang-bugzilla (@CyberShadow) reported this on 2018-05-10T11:21:07Z

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

CC List

Description

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).

Activity

dlangBugzillaToGithub

dlangBugzillaToGithub commented on May 15, 2018

@dlangBugzillaToGithub
Author

dlang-bugzilla (@CyberShadow) commented on 2018-05-15T23:03:19Z

https://github.com/dlang/phobos/pull/6509

See the comment there for more discussion.
added a commit that references this issue on Mar 12, 2025

Fix dlang#10334 - std.allocator: Regions are non-copyable, yet are pa…

58c2310
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Participants

      @LightBender@dlangBugzillaToGithub

      Issue actions

        std.allocator: Regions are non-copyable, yet are passed around in examples · Issue #10334 · dlang/phobos