From d966fba8e45aaac7ea5a27401c970e5711eaef21 Mon Sep 17 00:00:00 2001 From: Matthias Maier Date: Tue, 26 May 2020 19:59:52 -0500 Subject: [PATCH] Do not attempt to copy std::unique_ptr objects, and provide a workaround --- include/deal.II/base/work_stream.h | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/include/deal.II/base/work_stream.h b/include/deal.II/base/work_stream.h index 4549e494c9..1d03dbf89d 100644 --- a/include/deal.II/base/work_stream.h +++ b/include/deal.II/base/work_stream.h @@ -211,6 +211,13 @@ namespace WorkStream , currently_in_use(in_use) {} + // Provide a copy constructor that actually doesn't copy the + // internal state. This makes handling ScratchAndCopyDataObjects + // easier to handle with STL containers. + ScratchDataObject(const ScratchDataObject &) + : currently_in_use(false) + {} + ScratchDataObject(ScratchDataObject &&o) noexcept = default; }; @@ -710,19 +717,11 @@ namespace WorkStream , currently_in_use(in_use) {} - // TODO: when we push back an object to the list of scratch objects, in - // Worker::operator(), we first create an object and then copy - // it to the end of this list. this involves having two objects - // of the current type having pointers to it, each with their own - // currently_in_use flag. there is probably little harm in this - // because the original one goes out of scope right away again, but - // it's certainly awkward. one way to avoid this would be to use - // unique_ptr but we'd need to figure out a way to use it in - // non-C++11 mode - ScratchAndCopyDataObjects(const ScratchAndCopyDataObjects &o) - : scratch_data(o.scratch_data) - , copy_data(o.copy_data) - , currently_in_use(o.currently_in_use) + // Provide a copy constructor that actually doesn't copy the + // internal state. This makes handling ScratchAndCopyDataObjects + // easier to handle with STL containers. + ScratchAndCopyDataObjects(const ScratchAndCopyDataObjects &) + : currently_in_use(false) {} }; -- 2.39.5