]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Let FiniteElement::get_*data return a std::unique_ptr 6113/head
authorDaniel Arndt <daniel.arndt@iwr.uni-heidelberg.de>
Wed, 28 Mar 2018 23:46:06 +0000 (01:46 +0200)
committerDaniel Arndt <daniel.arndt@iwr.uni-heidelberg.de>
Sun, 1 Apr 2018 08:58:45 +0000 (10:58 +0200)
17 files changed:
include/deal.II/fe/fe.h
include/deal.II/fe/fe_dgp_nonparametric.h
include/deal.II/fe/fe_enriched.h
include/deal.II/fe/fe_face.h
include/deal.II/fe/fe_nothing.h
include/deal.II/fe/fe_p1nc.h
include/deal.II/fe/fe_poly.h
include/deal.II/fe/fe_poly_face.h
include/deal.II/fe/fe_poly_tensor.h
include/deal.II/fe/fe_system.h
source/fe/fe.cc
source/fe/fe_dgp_nonparametric.cc
source/fe/fe_enriched.cc
source/fe/fe_nothing.cc
source/fe/fe_p1nc.cc
source/fe/fe_system.cc
source/fe/fe_values.cc

index e632908b564bd0958e485b6249882fad79b0c1ae..59d11241db8e92b829c6c1da7f4d0f3cf926120a 100644 (file)
@@ -2660,7 +2660,7 @@ protected:
    * it is no longer necessary.
    */
   virtual
-  InternalDataBase *
+  std::unique_ptr<InternalDataBase>
   get_data (const UpdateFlags                                                    update_flags,
             const Mapping<dim,spacedim>                                         &mapping,
             const Quadrature<dim>                                               &quadrature,
@@ -2708,7 +2708,7 @@ protected:
    * it is no longer necessary.
    */
   virtual
-  InternalDataBase *
+  std::unique_ptr<InternalDataBase>
   get_face_data (const UpdateFlags                                                    update_flags,
                  const Mapping<dim,spacedim>                                         &mapping,
                  const Quadrature<dim-1>                                             &quadrature,
@@ -2756,7 +2756,7 @@ protected:
    * it is no longer necessary.
    */
   virtual
-  InternalDataBase *
+  std::unique_ptr<InternalDataBase>
   get_subface_data (const UpdateFlags                                                    update_flags,
                     const Mapping<dim,spacedim>                                         &mapping,
                     const Quadrature<dim-1>                                             &quadrature,
index b42a1c1a2ed6c7e38b2b1cd13f725978dfe687b5..205a1c0942e15b4e66fb55da444dc455cadc1fb3 100644 (file)
@@ -508,7 +508,7 @@ protected:
    * cell.
    */
   virtual
-  typename FiniteElement<dim,spacedim>::InternalDataBase *
+  std::unique_ptr<typename FiniteElement<dim,spacedim>::InternalDataBase>
   get_data (const UpdateFlags                                                    update_flags,
             const Mapping<dim,spacedim>                                         &mapping,
             const Quadrature<dim>                                               &quadrature,
index f97dc7bc814c3cb528cc9c26adeab3f242e49f95..1d223508aab44a4d9a296edf1ecbf1ea9b5f4726 100644 (file)
@@ -552,7 +552,7 @@ protected:
    * enrichment functions at each quadrature point depending on @p flags.
    */
   template <int dim_1>
-  typename FiniteElement<dim,spacedim>::InternalDataBase *
+  std::unique_ptr<typename FiniteElement<dim,spacedim>::InternalDataBase>
   setup_data (std::unique_ptr<typename FiniteElement<dim,spacedim>::InternalDataBase> &&fes_data,
               const UpdateFlags      flags,
               const Quadrature<dim_1> &quadrature) const;
@@ -563,19 +563,19 @@ protected:
    * (FEValues) then has to assume ownership (which includes destruction when it is no
    * more needed).
    */
-  virtual typename FiniteElement<dim,spacedim>::InternalDataBase *
+  virtual std::unique_ptr<typename FiniteElement<dim,spacedim>::InternalDataBase>
   get_data (const UpdateFlags      flags,
             const Mapping<dim,spacedim>    &mapping,
             const Quadrature<dim> &quadrature,
             dealii::internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > &output_data) const;
 
-  virtual typename FiniteElement<dim,spacedim>::InternalDataBase *
+  virtual std::unique_ptr<typename FiniteElement<dim,spacedim>::InternalDataBase>
   get_face_data (const UpdateFlags      update_flags,
                  const Mapping<dim,spacedim>    &mapping,
                  const Quadrature<dim-1> &quadrature,
                  dealii::internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim >        &output_data) const;
 
-  virtual typename FiniteElement<dim,spacedim>::InternalDataBase *
+  virtual std::unique_ptr<typename FiniteElement<dim,spacedim>::InternalDataBase>
   get_subface_data (const UpdateFlags      update_flags,
                     const Mapping<dim,spacedim>    &mapping,
                     const Quadrature<dim-1> &quadrature,
index 8f50d417ef5e071981198d84b5075c4a5dfc9781..88f8989e9950adb6bc0ec783185e1a46e9eaab88 100644 (file)
@@ -339,24 +339,23 @@ protected:
 
 
   virtual
-  typename FiniteElement<1,spacedim>::InternalDataBase *
+  std::unique_ptr<typename FiniteElement<1,spacedim>::InternalDataBase>
   get_data (const UpdateFlags                                                  /*update_flags*/,
             const Mapping<1,spacedim>                                         &/*mapping*/,
             const Quadrature<1>                                               &/*quadrature*/,
             dealii::internal::FEValuesImplementation::FiniteElementRelatedData<1, spacedim> &/*output_data*/) const
   {
-    return new typename FiniteElement<1, spacedim>::InternalDataBase;
+    return std_cxx14::make_unique<typename FiniteElement<1, spacedim>::InternalDataBase>();
   }
 
-  typename FiniteElement<1,spacedim>::InternalDataBase *
+  std::unique_ptr<typename FiniteElement<1,spacedim>::InternalDataBase>
   get_face_data(const UpdateFlags update_flags,
                 const Mapping<1,spacedim> &/*mapping*/,
                 const Quadrature<0> &quadrature,
                 dealii::internal::FEValuesImplementation::FiniteElementRelatedData<1, spacedim> &/*output_data*/) const
   {
     // generate a new data object and initialize some fields
-    typename FiniteElement<1,spacedim>::InternalDataBase *data =
-      new typename FiniteElement<1,spacedim>::InternalDataBase;
+    auto data = std_cxx14::make_unique<typename FiniteElement<1,spacedim>::InternalDataBase>();
     data->update_each = requires_update_flags(update_flags);
 
     const unsigned int n_q_points = quadrature.size();
@@ -369,10 +368,10 @@ protected:
         Assert(false, ExcNotImplemented());
       }
 
-    return data;
+    return std::move(data);
   }
 
-  typename FiniteElement<1,spacedim>::InternalDataBase *
+  std::unique_ptr<typename FiniteElement<1,spacedim>::InternalDataBase>
   get_subface_data(const UpdateFlags                                                  update_flags,
                    const Mapping<1,spacedim>                                         &mapping,
                    const Quadrature<0>                                               &quadrature,
index 991fd9bdec6744d9c821c47e79cc0f6e593dda4d..dffd1991629bf699ab03aa7d513e6e6c9a37f1a8 100644 (file)
@@ -167,7 +167,7 @@ public:
    * no meaningful data exists for this element.
    */
   virtual
-  typename FiniteElement<dim,spacedim>::InternalDataBase *
+  std::unique_ptr<typename FiniteElement<dim,spacedim>::InternalDataBase>
   get_data (const UpdateFlags                                                    update_flags,
             const Mapping<dim,spacedim>                                         &mapping,
             const Quadrature<dim>                                               &quadrature,
index e393ad441e3b5f89c7d4452b313198a202bcb52c..eee4138bcd65c414b49147c746750f9070b8a669 100644 (file)
@@ -297,19 +297,22 @@ private:
    * It returns an empty variable type of @ InternalDataBase and updates @ update_flags,
    * and computes trivially zero Hessian for each cell if it is needed.
    */
-  virtual FiniteElement<2,2>::InternalDataBase *
+  virtual
+  std::unique_ptr<FiniteElement<2,2>::InternalDataBase>
   get_data (const UpdateFlags update_flags,
             const Mapping<2,2> &,
             const Quadrature<2> &quadrature,
             dealii::internal::FEValuesImplementation::FiniteElementRelatedData<2,2> &output_data) const;
 
-  virtual FiniteElement<2,2>::InternalDataBase *
+  virtual
+  std::unique_ptr<FiniteElement<2,2>::InternalDataBase>
   get_face_data (const UpdateFlags update_flags,
                  const Mapping<2,2> &,
                  const Quadrature<1> &quadrature,
                  dealii::internal::FEValuesImplementation::FiniteElementRelatedData<2,2> &output_data) const;
 
-  virtual FiniteElement<2,2>::InternalDataBase *
+  virtual
+  std::unique_ptr<FiniteElement<2,2>::InternalDataBase>
   get_subface_data (const UpdateFlags update_flags,
                     const Mapping<2,2> &,
                     const Quadrature<1> &quadrature,
index 4ec0e9c77cfbe3d1930d001d9dff4921d92433c8..a4a1b7773795c64d98289a8041ff5e219121269f 100644 (file)
@@ -19,6 +19,7 @@
 
 #include <deal.II/fe/fe.h>
 #include <deal.II/base/quadrature.h>
+#include <deal.II/base/std_cxx14/memory.h>
 
 DEAL_II_NAMESPACE_OPEN
 
@@ -218,7 +219,7 @@ protected:
 
 
   virtual
-  typename FiniteElement<dim,spacedim>::InternalDataBase *
+  std::unique_ptr<typename FiniteElement<dim,spacedim>::InternalDataBase>
   get_data(const UpdateFlags                                                    update_flags,
            const Mapping<dim,spacedim>                                         &/*mapping*/,
            const Quadrature<dim>                                               &quadrature,
@@ -226,7 +227,7 @@ protected:
   {
     // generate a new data object and
     // initialize some fields
-    InternalData *data = new InternalData;
+    auto data = std_cxx14::make_unique<InternalData>();
     data->update_each = requires_update_flags(update_flags);
 
     const unsigned int n_q_points = quadrature.size();
@@ -321,7 +322,7 @@ protected:
             for (unsigned int k=0; k<this->dofs_per_cell; ++k)
               data->shape_3rd_derivatives[k][i] = third_derivatives[k];
         }
-    return data;
+    return std::move(data);
   }
 
   virtual
index b8d519c2bc7baa37620cf8207abf8d121b75f936..c419732109cc291a1c7b221049c46b6a3a1db1d7 100644 (file)
@@ -18,6 +18,7 @@
 
 
 #include <deal.II/base/qprojector.h>
+#include <deal.II/base/std_cxx14/memory.h>
 #include <deal.II/fe/fe.h>
 
 
@@ -81,17 +82,16 @@ protected:
 
 
   virtual
-  typename FiniteElement<dim,spacedim>::InternalDataBase *
+  std::unique_ptr<typename FiniteElement<dim,spacedim>::InternalDataBase>
   get_data (const UpdateFlags                                                    /*update_flags*/,
             const Mapping<dim,spacedim>                                         &/*mapping*/,
             const Quadrature<dim>                                               &/*quadrature*/,
             dealii::internal::FEValuesImplementation::FiniteElementRelatedData<dim, spacedim> &/*output_data*/) const
   {
-    InternalData *data = new InternalData;
-    return data;
+    return std_cxx14::make_unique<InternalData>();
   }
 
-  typename FiniteElement<dim,spacedim>::InternalDataBase *
+  std::unique_ptr<typename FiniteElement<dim,spacedim>::InternalDataBase>
   get_face_data(const UpdateFlags                                                    update_flags,
                 const Mapping<dim,spacedim>                                         &/*mapping*/,
                 const Quadrature<dim-1>                                             &quadrature,
@@ -99,7 +99,7 @@ protected:
   {
     // generate a new data object and
     // initialize some fields
-    InternalData *data = new InternalData;
+    auto data = std_cxx14::make_unique<InternalData>();
     data->update_each = requires_update_flags(update_flags);
 
     const unsigned int n_q_points = quadrature.size();
@@ -137,10 +137,10 @@ protected:
         Assert(false, ExcNotImplemented());
       }
 
-    return data;
+    return std::move(data);
   }
 
-  typename FiniteElement<dim,spacedim>::InternalDataBase *
+  std::unique_ptr<typename FiniteElement<dim,spacedim>::InternalDataBase>
   get_subface_data(const UpdateFlags                                                    update_flags,
                    const Mapping<dim,spacedim>                                         &mapping,
                    const Quadrature<dim-1>                                             &quadrature,
index aef8817302ff475c1ae3acc73dfead1a7320870e..46181817b4e01f844d382422a6dc93dc44d11767 100644 (file)
@@ -22,6 +22,7 @@
 #include <deal.II/fe/fe.h>
 #include <deal.II/base/derivative_form.h>
 #include <deal.II/base/quadrature.h>
+#include <deal.II/base/std_cxx14/memory.h>
 #include <deal.II/base/thread_management.h>
 
 
@@ -208,7 +209,7 @@ protected:
   /* NOTE: The following function has its definition inlined into the class declaration
      because we otherwise run into a compiler error with MS Visual Studio. */
   virtual
-  typename FiniteElement<dim,spacedim>::InternalDataBase *
+  std::unique_ptr<typename FiniteElement<dim,spacedim>::InternalDataBase>
   get_data(const UpdateFlags                                                    update_flags,
            const Mapping<dim,spacedim>                                         &/*mapping*/,
            const Quadrature<dim>                                               &quadrature,
@@ -216,7 +217,7 @@ protected:
   {
     // generate a new data object and
     // initialize some fields
-    InternalData *data = new InternalData;
+    auto data = std_cxx14::make_unique<InternalData>();
     data->update_each = requires_update_flags(update_flags);
 
     const unsigned int n_q_points = quadrature.size();
@@ -328,7 +329,7 @@ protected:
             }
 
         }
-    return data;
+    return std::move(data);
   }
 
   virtual
index de796551857f1ad4cc10a298c637f658c33dec24..7ac364896baf984a9ed95d2f84166e07d828c31a 100644 (file)
@@ -959,21 +959,22 @@ public:
 
 protected:
 
-  virtual typename FiniteElement<dim,spacedim>::InternalDataBase *
+  virtual
+  std::unique_ptr<typename FiniteElement<dim,spacedim>::InternalDataBase>
   get_data (const UpdateFlags                                                    update_flags,
             const Mapping<dim,spacedim>                                         &mapping,
             const Quadrature<dim>                                               &quadrature,
             dealii::internal::FEValuesImplementation::FiniteElementRelatedData<dim, spacedim> &output_data) const;
 
   virtual
-  typename FiniteElement<dim,spacedim>::InternalDataBase *
+  std::unique_ptr<typename FiniteElement<dim,spacedim>::InternalDataBase>
   get_face_data (const UpdateFlags                                                    update_flags,
                  const Mapping<dim,spacedim>                                         &mapping,
                  const Quadrature<dim-1>                                             &quadrature,
                  dealii::internal::FEValuesImplementation::FiniteElementRelatedData<dim, spacedim> &output_data) const;
 
   virtual
-  typename FiniteElement<dim,spacedim>::InternalDataBase *
+  std::unique_ptr<typename FiniteElement<dim,spacedim>::InternalDataBase>
   get_subface_data (const UpdateFlags                                                    update_flags,
                     const Mapping<dim,spacedim>                                         &mapping,
                     const Quadrature<dim-1>                                             &quadrature,
@@ -1115,7 +1116,7 @@ private:
      * base_noth base element.
      */
     void set_fe_data(const unsigned int                        base_no,
-                     typename FiniteElement<dim,spacedim>::InternalDataBase *);
+                     std::unique_ptr<typename FiniteElement<dim,spacedim>::InternalDataBase>);
 
     /**
      * Give read-access to the pointer to a @p InternalData of the @p
@@ -1144,7 +1145,7 @@ private:
      * necessarily the same, we only need as many of these objects as there
      * are base elements, irrespective of their multiplicity.
      */
-    typename std::vector<typename FiniteElement<dim,spacedim>::InternalDataBase *> base_fe_datas;
+    typename std::vector<std::unique_ptr<typename FiniteElement<dim,spacedim>::InternalDataBase > > base_fe_datas;
 
     /**
      * A collection of objects to which the base elements will write their
index 2a92dbe918fe32f729ef5714ed01c675ab7ea221..56c998e13539f5add835fd42ad8853398fb661b7 100644 (file)
@@ -1193,7 +1193,7 @@ FiniteElement<dim,spacedim>::compute_n_nonzero_components (
 /*------------------------------- FiniteElement ----------------------*/
 
 template <int dim, int spacedim>
-typename FiniteElement<dim,spacedim>::InternalDataBase *
+std::unique_ptr<typename FiniteElement<dim,spacedim>::InternalDataBase>
 FiniteElement<dim,spacedim>::get_face_data (const UpdateFlags       flags,
                                             const Mapping<dim,spacedim>      &mapping,
                                             const Quadrature<dim-1> &quadrature,
@@ -1207,7 +1207,7 @@ FiniteElement<dim,spacedim>::get_face_data (const UpdateFlags       flags,
 
 
 template <int dim, int spacedim>
-typename FiniteElement<dim,spacedim>::InternalDataBase *
+std::unique_ptr<typename FiniteElement<dim,spacedim>::InternalDataBase>
 FiniteElement<dim,spacedim>::get_subface_data (const UpdateFlags        flags,
                                                const Mapping<dim,spacedim>      &mapping,
                                                const Quadrature<dim-1> &quadrature,
index d1986485cd53be0e3b2c60cbf77144092c2243d2..faacf765065f68448f171298de3a46b2baa8b905 100644 (file)
@@ -255,7 +255,7 @@ FE_DGPNonparametric<dim,spacedim>::requires_update_flags (const UpdateFlags flag
 //---------------------------------------------------------------------------
 
 template <int dim, int spacedim>
-typename FiniteElement<dim,spacedim>::InternalDataBase *
+std::unique_ptr<typename FiniteElement<dim,spacedim>::InternalDataBase>
 FE_DGPNonparametric<dim,spacedim>::
 get_data (const UpdateFlags                                                    update_flags,
           const Mapping<dim,spacedim> &,
@@ -263,14 +263,13 @@ get_data (const UpdateFlags                                                    u
           dealii::internal::FEValuesImplementation::FiniteElementRelatedData<dim, spacedim> &/*output_data*/) const
 {
   // generate a new data object
-  typename FiniteElement<dim,spacedim>::InternalDataBase *data
-    = new typename FiniteElement<dim,spacedim>::InternalDataBase;
+  auto data = std_cxx14::make_unique<typename FiniteElement<dim,spacedim>::InternalDataBase>();
   data->update_each = requires_update_flags(update_flags);
 
   // other than that, there is nothing we can add here as discussed
   // in the general documentation of this class
 
-  return data;
+  return std::move(data);
 }
 
 
index 5cce24b6f1257e5ab615be57f22c9e7f4c5a52ec..164daa8a2fc05203ffc51a741610247336179971 100644 (file)
@@ -288,7 +288,7 @@ FE_Enriched<dim,spacedim>::requires_update_flags (const UpdateFlags flags) const
 
 template <int dim, int spacedim>
 template <int dim_1>
-typename FiniteElement<dim,spacedim>::InternalDataBase *
+std::unique_ptr<typename FiniteElement<dim,spacedim>::InternalDataBase>
 FE_Enriched<dim,spacedim>::setup_data (std::unique_ptr<typename FiniteElement<dim,spacedim>::InternalDataBase> &&fes_data,
                                        const UpdateFlags      flags,
                                        const Quadrature<dim_1> &quadrature) const
@@ -300,7 +300,7 @@ FE_Enriched<dim,spacedim>::setup_data (std::unique_ptr<typename FiniteElement<di
   // that fes_data points to, to the new InternalData object.
   typename FESystem<dim,spacedim>::InternalData *data_fesystem =
     static_cast<typename FESystem<dim,spacedim>::InternalData *> (fes_data.release());
-  InternalData *data = new InternalData(std::unique_ptr<typename FESystem<dim,spacedim>::InternalData>(data_fesystem));
+  auto data = std_cxx14::make_unique<InternalData>(std::unique_ptr<typename FESystem<dim,spacedim>::InternalData>(data_fesystem));
 
   // copy update_each from FESystem data:
   data->update_each = data_fesystem->update_each;
@@ -326,12 +326,12 @@ FE_Enriched<dim,spacedim>::setup_data (std::unique_ptr<typename FiniteElement<di
         }
     }
 
-  return data;
+  return std::move(data);
 }
 
 
 template <int dim, int spacedim>
-typename FiniteElement<dim,spacedim>::InternalDataBase *
+std::unique_ptr<typename FiniteElement<dim,spacedim>::InternalDataBase>
 FE_Enriched<dim,spacedim>::get_face_data (const UpdateFlags      update_flags,
                                           const Mapping<dim,spacedim>    &mapping,
                                           const Quadrature<dim-1> &quadrature,
@@ -344,7 +344,7 @@ FE_Enriched<dim,spacedim>::get_face_data (const UpdateFlags      update_flags,
 
 
 template <int dim, int spacedim>
-typename FiniteElement<dim,spacedim>::InternalDataBase *
+std::unique_ptr<typename FiniteElement<dim,spacedim>::InternalDataBase>
 FE_Enriched<dim,spacedim>::get_subface_data (const UpdateFlags      update_flags,
                                              const Mapping<dim,spacedim>    &mapping,
                                              const Quadrature<dim-1> &quadrature,
@@ -357,7 +357,7 @@ FE_Enriched<dim,spacedim>::get_subface_data (const UpdateFlags      update_flags
 
 
 template <int dim, int spacedim>
-typename FiniteElement<dim,spacedim>::InternalDataBase *
+std::unique_ptr<typename FiniteElement<dim,spacedim>::InternalDataBase>
 FE_Enriched<dim,spacedim>::get_data (const UpdateFlags      flags,
                                      const Mapping<dim,spacedim>    &mapping,
                                      const Quadrature<dim> &quadrature,
index 2efbafd62b5f1099c6c8588909b64c5d05db9c02..3ab91744c3990ce8c485fba2b503faa6ad664de0 100644 (file)
@@ -99,7 +99,7 @@ FE_Nothing<dim,spacedim>::shape_value (const unsigned int /*i*/,
 
 
 template <int dim, int spacedim>
-typename FiniteElement<dim,spacedim>::InternalDataBase *
+std::unique_ptr<typename FiniteElement<dim,spacedim>::InternalDataBase>
 FE_Nothing<dim,spacedim>::get_data (const UpdateFlags                                                    /*update_flags*/,
                                     const Mapping<dim,spacedim>                                         &/*mapping*/,
                                     const Quadrature<dim>                                               &/*quadrature*/,
@@ -108,9 +108,7 @@ FE_Nothing<dim,spacedim>::get_data (const UpdateFlags
   // Create a default data object.  Normally we would then
   // need to resize things to hold the appropriate numbers
   // of dofs, but in this case all data fields are empty.
-  typename FiniteElement<dim,spacedim>::InternalDataBase *data
-    = new typename FiniteElement<dim,spacedim>::InternalDataBase();
-  return data;
+  return std_cxx14::make_unique<typename FiniteElement<dim,spacedim>::InternalDataBase>();
 }
 
 
index c978d62ea056e1ec0d78c020baf908e38d700893..6155396ee2d879121b6fab77d2dfe7a32d5ce801 100644 (file)
@@ -124,13 +124,13 @@ FE_P1NC::get_linear_shape_coefficients (const Triangulation<2,2>::cell_iterator
 
 
 
-FiniteElement<2,2>::InternalDataBase *
+std::unique_ptr<FiniteElement<2,2>::InternalDataBase>
 FE_P1NC::get_data (const UpdateFlags update_flags,
                    const Mapping<2,2> &,
                    const Quadrature<2> &quadrature,
                    dealii::internal::FEValuesImplementation::FiniteElementRelatedData<2,2> &output_data) const
 {
-  FiniteElement<2,2>::InternalDataBase *data = new FiniteElement<2,2>::InternalDataBase;
+  auto data = std_cxx14::make_unique<FiniteElement<2,2>::InternalDataBase>();
 
   data->update_each = requires_update_flags(update_flags);
 
@@ -146,13 +146,13 @@ FE_P1NC::get_data (const UpdateFlags update_flags,
 
 
 
-FiniteElement<2,2>::InternalDataBase *
+std::unique_ptr<FiniteElement<2,2>::InternalDataBase>
 FE_P1NC::get_face_data (const UpdateFlags update_flags,
                         const Mapping<2,2> &,
                         const Quadrature<1> &quadrature,
                         dealii::internal::FEValuesImplementation::FiniteElementRelatedData<2,2> &output_data) const
 {
-  FiniteElement<2,2>::InternalDataBase *data = new FiniteElement<2,2>::InternalDataBase;
+  auto data = std_cxx14::make_unique<FiniteElement<2,2>::InternalDataBase>();
 
   data->update_each = requires_update_flags(update_flags);
 
@@ -168,13 +168,13 @@ FE_P1NC::get_face_data (const UpdateFlags update_flags,
 
 
 
-FiniteElement<2,2>::InternalDataBase *
+std::unique_ptr<FiniteElement<2,2>::InternalDataBase>
 FE_P1NC::get_subface_data (const UpdateFlags update_flags,
                            const Mapping<2,2> &,
                            const Quadrature<1> &quadrature,
                            dealii::internal::FEValuesImplementation::FiniteElementRelatedData<2,2> &output_data) const
 {
-  FiniteElement<2,2>::InternalDataBase *data = new FiniteElement<2,2>::InternalDataBase;
+  auto data = std_cxx14::make_unique<FiniteElement<2,2>::InternalDataBase>();
 
   data->update_each = requires_update_flags(update_flags);
 
index 81c9671f1dbe67bb80ebcd91c7b01d66584f8e97..2896f59dd729746bafe9dad388e18c8eac3934b8 100644 (file)
@@ -63,11 +63,7 @@ FESystem<dim,spacedim>::InternalData::~InternalData()
 {
   // delete pointers and set them to zero to avoid inadvertent use
   for (unsigned int i=0; i<base_fe_datas.size(); ++i)
-    if (base_fe_datas[i])
-      {
-        delete base_fe_datas[i];
-        base_fe_datas[i] = nullptr;
-      }
+    base_fe_datas[i].reset();
 }
 
 
@@ -87,11 +83,11 @@ template <int dim, int spacedim>
 void
 FESystem<dim,spacedim>::
 InternalData::set_fe_data (const unsigned int base_no,
-                           typename FiniteElement<dim,spacedim>::InternalDataBase *ptr)
+                           std::unique_ptr<typename FiniteElement<dim,spacedim>::InternalDataBase> ptr)
 {
   Assert(base_no<base_fe_datas.size(),
          ExcIndexRange(base_no,0,base_fe_datas.size()));
-  base_fe_datas[base_no]=ptr;
+  base_fe_datas[base_no]=std::move(ptr);
 }
 
 
@@ -883,7 +879,7 @@ FESystem<dim,spacedim>::requires_update_flags (const UpdateFlags flags) const
 
 
 template <int dim, int spacedim>
-typename FiniteElement<dim,spacedim>::InternalDataBase *
+std::unique_ptr<typename FiniteElement<dim,spacedim>::InternalDataBase>
 FESystem<dim,spacedim>::
 get_data (const UpdateFlags                                                    flags,
           const Mapping<dim,spacedim>                                         &mapping,
@@ -897,7 +893,7 @@ get_data (const UpdateFlags                                                    f
   // and so the current object's update_each flag needs to be
   // correct in case the current FESystem is a base element for another,
   // higher-level FESystem itself.
-  InternalData *data = new InternalData(this->n_base_elements());
+  auto data = std_cxx14::make_unique<InternalData>(this->n_base_elements());
   data->update_each = requires_update_flags(flags);
 
   // get data objects from each of the base elements and store
@@ -925,21 +921,21 @@ get_data (const UpdateFlags                                                    f
       // out of the base output object into the system output object,
       // but we can't because we can't know what the elements already
       // copied and/or will want to update on every cell
-      typename FiniteElement<dim,spacedim>::InternalDataBase *base_fe_data =
+      auto base_fe_data =
         base_element(base_no).get_data (flags, mapping, quadrature,
                                         base_fe_output_object);
 
-      data->set_fe_data(base_no, base_fe_data);
+      data->set_fe_data(base_no, std::move(base_fe_data));
     }
 
-  return data;
+  return std::move(data);
 }
 
 // The following function is a clone of get_data, with the exception
 // that get_face_data of the base elements is called.
 
 template <int dim, int spacedim>
-typename FiniteElement<dim,spacedim>::InternalDataBase *
+std::unique_ptr<typename FiniteElement<dim,spacedim>::InternalDataBase>
 FESystem<dim,spacedim>::
 get_face_data (const UpdateFlags                                                    flags,
                const Mapping<dim,spacedim>                                         &mapping,
@@ -953,7 +949,7 @@ get_face_data (const UpdateFlags
   // and so the current object's update_each flag needs to be
   // correct in case the current FESystem is a base element for another,
   // higher-level FESystem itself.
-  InternalData *data = new InternalData(this->n_base_elements());
+  auto data = std_cxx14::make_unique<InternalData>(this->n_base_elements());
   data->update_each = requires_update_flags(flags);
 
   // get data objects from each of the base elements and store
@@ -981,14 +977,14 @@ get_face_data (const UpdateFlags
       // out of the base output object into the system output object,
       // but we can't because we can't know what the elements already
       // copied and/or will want to update on every cell
-      typename FiniteElement<dim,spacedim>::InternalDataBase *base_fe_data =
+      auto base_fe_data =
         base_element(base_no).get_face_data (flags, mapping, quadrature,
                                              base_fe_output_object);
 
-      data->set_fe_data(base_no, base_fe_data);
+      data->set_fe_data(base_no, std::move(base_fe_data));
     }
 
-  return data;
+  return std::move(data);
 }
 
 
@@ -997,7 +993,7 @@ get_face_data (const UpdateFlags
 // that get_subface_data of the base elements is called.
 
 template <int dim, int spacedim>
-typename FiniteElement<dim,spacedim>::InternalDataBase *
+std::unique_ptr<typename FiniteElement<dim,spacedim>::InternalDataBase>
 FESystem<dim,spacedim>::
 get_subface_data (const UpdateFlags                                                    flags,
                   const Mapping<dim,spacedim>                                         &mapping,
@@ -1011,7 +1007,7 @@ get_subface_data (const UpdateFlags
   // and so the current object's update_each flag needs to be
   // correct in case the current FESystem is a base element for another,
   // higher-level FESystem itself.
-  InternalData *data = new InternalData(this->n_base_elements());
+  auto data = std_cxx14::make_unique<InternalData>(this->n_base_elements());
   data->update_each = requires_update_flags(flags);
 
   // get data objects from each of the base elements and store
@@ -1039,14 +1035,14 @@ get_subface_data (const UpdateFlags
       // out of the base output object into the system output object,
       // but we can't because we can't know what the elements already
       // copied and/or will want to update on every cell
-      typename FiniteElement<dim,spacedim>::InternalDataBase *base_fe_data =
+      auto base_fe_data =
         base_element(base_no).get_subface_data (flags, mapping, quadrature,
                                                 base_fe_output_object);
 
-      data->set_fe_data(base_no, base_fe_data);
+      data->set_fe_data(base_no, std::move(base_fe_data));
     }
 
-  return data;
+  return std::move(data);
 }
 
 
index a70e0f60a91bde3b38b9a1ea0a39cdb0af304b0e..eddc47f6425de325842afff597e7c2daf267a61b 100644 (file)
@@ -3957,14 +3957,14 @@ FEValues<dim,spacedim>::initialize (const UpdateFlags update_flags)
 
   // then get objects into which the FE and the Mapping can store
   // intermediate data used across calls to reinit. we can do this in parallel
-  Threads::Task<typename FiniteElement<dim,spacedim>::InternalDataBase *>
+  Threads::Task<std::unique_ptr<typename FiniteElement<dim,spacedim>::InternalDataBase> >
   fe_get_data = Threads::new_task (&FiniteElement<dim,spacedim>::get_data,
                                    *this->fe,
                                    flags,
                                    *this->mapping,
                                    quadrature,
                                    this->finite_element_output);
-  Threads::Task<typename Mapping<dim,spacedim>::InternalDataBase *>
+  Threads::Task<typename Mapping<dim,spacedim>::InternalDataBase * >
   mapping_get_data;
   if (flags & update_mapping)
     mapping_get_data = Threads::new_task (&Mapping<dim,spacedim>::get_data,
@@ -3975,7 +3975,7 @@ FEValues<dim,spacedim>::initialize (const UpdateFlags update_flags)
   this->update_flags = flags;
 
   // then collect answers from the two task above
-  this->fe_data.reset (fe_get_data.return_value());
+  this->fe_data = std::move(fe_get_data.return_value());
   if (flags & update_mapping)
     this->mapping_data.reset (mapping_get_data.return_value());
   else
@@ -4207,7 +4207,7 @@ FEFaceValues<dim,spacedim>::initialize (const UpdateFlags update_flags)
 
   // then get objects into which the FE and the Mapping can store
   // intermediate data used across calls to reinit. this can be done in parallel
-  Threads::Task<typename FiniteElement<dim,spacedim>::InternalDataBase *>
+  Threads::Task<std::unique_ptr<typename FiniteElement<dim,spacedim>::InternalDataBase> >
   fe_get_data = Threads::new_task (&FiniteElement<dim,spacedim>::get_face_data,
                                    *this->fe,
                                    flags,
@@ -4225,7 +4225,7 @@ FEFaceValues<dim,spacedim>::initialize (const UpdateFlags update_flags)
   this->update_flags = flags;
 
   // then collect answers from the two task above
-  this->fe_data.reset (fe_get_data.return_value());
+  this->fe_data = std::move(fe_get_data.return_value());
   if (flags & update_mapping)
     this->mapping_data.reset (mapping_get_data.return_value());
   else
@@ -4375,7 +4375,7 @@ FESubfaceValues<dim,spacedim>::initialize (const UpdateFlags update_flags)
   // then get objects into which the FE and the Mapping can store
   // intermediate data used across calls to reinit. this can be done
   // in parallel
-  Threads::Task<typename FiniteElement<dim,spacedim>::InternalDataBase *>
+  Threads::Task<std::unique_ptr<typename FiniteElement<dim,spacedim>::InternalDataBase> >
   fe_get_data = Threads::new_task (&FiniteElement<dim,spacedim>::get_subface_data,
                                    *this->fe,
                                    flags,
@@ -4393,7 +4393,7 @@ FESubfaceValues<dim,spacedim>::initialize (const UpdateFlags update_flags)
   this->update_flags = flags;
 
   // then collect answers from the two task above
-  this->fe_data.reset (fe_get_data.return_value());
+  this->fe_data = std::move(fe_get_data.return_value());
   if (flags & update_mapping)
     this->mapping_data.reset (mapping_get_data.return_value());
   else

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.