From: Matthias Maier Date: Wed, 27 May 2020 00:59:52 +0000 (-0500) Subject: Do not attempt to copy std::unique_ptr objects, and provide a workaround X-Git-Tag: v9.3.0-rc1~1535^2~5 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d966fba8e45aaac7ea5a27401c970e5711eaef21;p=dealii.git Do not attempt to copy std::unique_ptr objects, and provide a workaround --- 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) {} };