You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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 objectsshould 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).
The text was updated successfully, but these errors were encountered:
…ssed around in examples
This doesn't fix that non-copyable regions are still passed around in
examples, so we still rely on NRVO to do its thing and elide the
copy, but at least this will now catch wrong code that mistakenly
copied Regions around.
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
The text was updated successfully, but these errors were encountered: