]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Let FE::clone() return a std::unique_ptr.
authorWolfgang Bangerth <bangerth@colostate.edu>
Thu, 1 Jun 2017 21:11:58 +0000 (15:11 -0600)
committerWolfgang Bangerth <bangerth@colostate.edu>
Thu, 1 Jun 2017 22:28:32 +0000 (16:28 -0600)
48 files changed:
include/deal.II/fe/fe.h
include/deal.II/fe/fe_abf.h
include/deal.II/fe/fe_bdm.h
include/deal.II/fe/fe_bernstein.h
include/deal.II/fe/fe_dg_vector.h
include/deal.II/fe/fe_dg_vector.templates.h
include/deal.II/fe/fe_dgp.h
include/deal.II/fe/fe_dgp_monomial.h
include/deal.II/fe/fe_dgp_nonparametric.h
include/deal.II/fe/fe_dgq.h
include/deal.II/fe/fe_enriched.h
include/deal.II/fe/fe_face.h
include/deal.II/fe/fe_nedelec.h
include/deal.II/fe/fe_nothing.h
include/deal.II/fe/fe_p1nc.h
include/deal.II/fe/fe_q.h
include/deal.II/fe/fe_q_bubbles.h
include/deal.II/fe/fe_q_dg0.h
include/deal.II/fe/fe_q_hierarchical.h
include/deal.II/fe/fe_q_iso_q1.h
include/deal.II/fe/fe_rannacher_turek.h
include/deal.II/fe/fe_raviart_thomas.h
include/deal.II/fe/fe_system.h
include/deal.II/fe/fe_trace.h
source/fe/fe_abf.cc
source/fe/fe_bdm.cc
source/fe/fe_bernstein.cc
source/fe/fe_dg_vector.cc
source/fe/fe_dgp.cc
source/fe/fe_dgp_monomial.cc
source/fe/fe_dgp_nonparametric.cc
source/fe/fe_dgq.cc
source/fe/fe_enriched.cc
source/fe/fe_face.cc
source/fe/fe_nedelec.cc
source/fe/fe_nothing.cc
source/fe/fe_p1nc.cc
source/fe/fe_q.cc
source/fe/fe_q_base.cc
source/fe/fe_q_bubbles.cc
source/fe/fe_q_dg0.cc
source/fe/fe_q_hierarchical.cc
source/fe/fe_q_iso_q1.cc
source/fe/fe_rannacher_turek.cc
source/fe/fe_raviart_thomas.cc
source/fe/fe_raviart_thomas_nodal.cc
source/fe/fe_system.cc
source/fe/fe_trace.cc

index d0adf0d4f0a1ee6a6506e3c04ecf6526696036b9..ad2926492b0ef0caad2cccbb8f3eec7be287c394 100644 (file)
@@ -24,6 +24,9 @@
 #include <deal.II/fe/block_mask.h>
 #include <deal.II/fe/mapping.h>
 
+#include <memory>
+
+
 DEAL_II_NAMESPACE_OPEN
 
 template <int dim, int spacedim> class FEValuesBase;
@@ -697,12 +700,19 @@ public:
   virtual ~FiniteElement ();
 
   /**
-   * A sort of virtual copy constructor. Some places in the library, for
+   * A sort of virtual copy constructor, this function returns a copy of
+   * the finite element object. Derived classes need to override the function
+   * here in this base class and return an object of the same type as the
+   * derived class.
+   *
+   * Some places in the library, for
    * example the constructors of FESystem as well as the hp::FECollection
    * class, need to make copies of finite elements without knowing their exact
    * type. They do so through this function.
    */
-  virtual FiniteElement<dim,spacedim> *clone() const = 0;
+  virtual
+  std::unique_ptr<FiniteElement<dim,spacedim>>
+                                            clone() const = 0;
 
   /**
    * Return a string that uniquely identifies a finite element. The general
index eef630f3886578f3c8d7594397585d16ec576af8..4c80a59a44bb7a4820dda426608bd89824bb4264 100644 (file)
@@ -130,7 +130,10 @@ public:
                                                             std::vector<double>                &nodal_values) const;
 
   virtual std::size_t memory_consumption () const;
-  virtual FiniteElement<dim> *clone() const;
+
+  virtual
+  std::unique_ptr<FiniteElement<dim,dim> >
+  clone() const;
 
 private:
   /**
index c7cc26e1ea64e57ea388f100384c6a69bf19f279..eb33d12ad423b4670385731523f0abfdd73652d3 100644 (file)
@@ -70,7 +70,9 @@ public:
    */
   virtual std::string get_name () const;
 
-  virtual FiniteElement<dim> *clone () const;
+  virtual
+  std::unique_ptr<FiniteElement<dim,dim> >
+  clone() const;
 
   // documentation inherited from the base class
   virtual
index 798eaa645ebb1be28d03781050d2e9a1e832bd82..975a29f14a237bcbd7c03552cff5f20b93159b85 100644 (file)
@@ -192,14 +192,11 @@ public:
    */
   virtual std::string get_name () const;
 
-protected:
+  virtual
+  std::unique_ptr<FiniteElement<dim,spacedim> >
+  clone() const;
 
-  /**
-   * @p clone function instead of a copy constructor.
-   *
-   * This function is needed by the constructors of @p FESystem.
-   */
-  virtual FiniteElement<dim,spacedim> *clone() const;
+protected:
 
   /**
    * Only for internal use. Its full name is @p get_dofs_per_object_vector
index fdafa6a7039841c88c04c916db8747308de1175b..bab8e80f34e25557261c2ebe4646cd113e286c0e 100644 (file)
@@ -59,9 +59,6 @@ public:
    * Constructor for the vector element of degree @p p.
    */
   FE_DGVector (const unsigned int p, MappingType m);
-public:
-
-  FiniteElement<dim, spacedim> *clone() const;
 
   /**
    * Return a string that uniquely identifies a finite element. This class
@@ -70,6 +67,9 @@ public:
    */
   virtual std::string get_name () const;
 
+  virtual
+  std::unique_ptr<FiniteElement<dim,spacedim> >
+  clone() const;
 
   /**
    * This function returns @p true, if the shape function @p shape_index has
index 4a67fc7b8fa1bc01a3f5eb4dd979b60ef53d9d39..21e72b8ff5441d8e25eceac9b8e2b19fc04d27e5 100644 (file)
@@ -21,6 +21,9 @@
 #include <deal.II/fe/fe_tools.h>
 #include <deal.II/base/quadrature_lib.h>
 
+#include <deal.II/base/std_cxx14/memory.h>
+
+
 DEAL_II_NAMESPACE_OPEN
 
 
@@ -51,10 +54,10 @@ FE_DGVector<PolynomialType,dim,spacedim>::FE_DGVector (
 
 
 template <class PolynomialType, int dim, int spacedim>
-FiniteElement<dim, spacedim> *
+std::unique_ptr<FiniteElement<dim,spacedim> >
 FE_DGVector<PolynomialType,dim,spacedim>::clone() const
 {
-  return new FE_DGVector<PolynomialType, dim, spacedim>(*this);
+  return std_cxx14::make_unique<FE_DGVector<PolynomialType, dim, spacedim>>(*this);
 }
 
 
index ef22bfabadff6bbfd3b32fee6e1e4e5e500b5740..fbea1cc51758bb99870e85ad1f536c3580003baa 100644 (file)
@@ -472,14 +472,9 @@ public:
   virtual std::pair<Table<2,bool>, std::vector<unsigned int> >
   get_constant_modes () const;
 
-protected:
-
-  /**
-   * @p clone function instead of a copy constructor.
-   *
-   * This function is needed by the constructors of @p FESystem.
-   */
-  virtual FiniteElement<dim,spacedim> *clone() const;
+  virtual
+  std::unique_ptr<FiniteElement<dim,spacedim> >
+  clone() const;
 
 private:
 
index ce393da029c3b1a97a3488d9e9286c1ec020043f..b4775cf6c8192051bfd74c58d34f2bea407e10a4 100644 (file)
@@ -433,14 +433,9 @@ public:
    */
   virtual std::size_t memory_consumption () const;
 
-protected:
-
-  /**
-   * @p clone function instead of a copy constructor.
-   *
-   * This function is needed by the constructors of @p FESystem.
-   */
-  virtual FiniteElement<dim> *clone() const;
+  virtual
+  std::unique_ptr<FiniteElement<dim,dim> >
+  clone() const;
 
 private:
 
index 9b054dc0a183deaaf379547f1d66a2614a316a13..1052fd36ab9c0d7531468df931be4123869fdf05 100644 (file)
@@ -281,6 +281,10 @@ public:
    */
   virtual std::string get_name () const;
 
+  virtual
+  std::unique_ptr<FiniteElement<dim,spacedim> >
+  clone() const;
+
   // for documentation, see the FiniteElement base class
   virtual
   UpdateFlags
@@ -533,13 +537,6 @@ private:
 
 protected:
 
-  /**
-   * @p clone function instead of a copy constructor.
-   *
-   * This function is needed by the constructors of @p FESystem.
-   */
-  virtual FiniteElement<dim,spacedim> *clone() const;
-
   /**
    * Prepare internal data structures and fill in values independent of the
    * cell.
index 693cc52bca8c8894280b15490cc1b3fe2957277d..0b8d8aeafe6d89c60ea2d57aac11e94862a0be44 100644 (file)
@@ -322,6 +322,9 @@ public:
    */
   virtual std::size_t memory_consumption () const;
 
+  virtual
+  std::unique_ptr<FiniteElement<dim,spacedim> >
+  clone() const;
 
 protected:
   /**
@@ -334,13 +337,6 @@ protected:
    */
   FE_DGQ (const std::vector<Polynomials::Polynomial<double> > &polynomials);
 
-  /**
-   * @p clone function instead of a copy constructor.
-   *
-   * This function is needed by the constructors of @p FESystem.
-   */
-  virtual FiniteElement<dim, spacedim> *clone() const;
-
 private:
   /**
    * Only for internal use. Its full name is @p get_dofs_per_object_vector
@@ -432,14 +428,9 @@ public:
   void
   convert_generalized_support_point_values_to_nodal_values (const std::vector<Vector<double> > &support_point_values,
                                                             std::vector<double>                &nodal_values) const;
-
-protected:
-  /**
-   * @p clone function instead of a copy constructor.
-   *
-   * This function is needed by the constructors of @p FESystem.
-   */
-  virtual FiniteElement<dim,spacedim> *clone() const;
+  virtual
+  std::unique_ptr<FiniteElement<dim,spacedim> >
+  clone() const;
 };
 
 
@@ -480,13 +471,9 @@ public:
    */
   virtual std::string get_name () const;
 
-protected:
-  /**
-   * @p clone function instead of a copy constructor.
-   *
-   * This function is needed by the constructors of @p FESystem.
-   */
-  virtual FiniteElement<dim,spacedim> *clone() const;
+  virtual
+  std::unique_ptr<FiniteElement<dim,spacedim> >
+  clone() const;
 };
 
 
@@ -531,13 +518,9 @@ public:
    */
   virtual std::string get_name () const;
 
-protected:
-  /**
-   * @p clone function instead of a copy constructor.
-   *
-   * This function is needed by the constructors of @p FESystem.
-   */
-  virtual FiniteElement<dim,spacedim> *clone() const;
+  virtual
+  std::unique_ptr<FiniteElement<dim,spacedim> >
+  clone() const;
 };
 
 
index 45113558eaa7afded8d1d17b21c9fd6d30b87008..14cb41ed4d12da6d2d7880ecf9775a6a31d09999 100644 (file)
@@ -273,12 +273,9 @@ private:
                const std::vector<std::vector<std::function<const Function<spacedim> *(const typename Triangulation<dim, spacedim>::cell_iterator &) > > > &functions);
 public:
 
-  /**
-   * @p clone function instead of a copy constructor.
-   *
-   * This function is needed by the constructors of @p FESystem.
-   */
-  virtual FiniteElement<dim,spacedim> *clone() const;
+  virtual
+  std::unique_ptr<FiniteElement<dim,spacedim> >
+  clone() const;
 
   virtual
   UpdateFlags
index 4246522f40a3ed2d7329a05e2c115156f733b83d..82943decfee39bd68fbecdeb9604e83448727873 100644 (file)
@@ -59,7 +59,9 @@ public:
    */
   FE_FaceQ (const unsigned int p);
 
-  virtual FiniteElement<dim,spacedim> *clone() const;
+  virtual
+  std::unique_ptr<FiniteElement<dim,spacedim> >
+  clone() const;
 
   /**
    * Return a string that uniquely identifies a finite element. This class
@@ -156,10 +158,9 @@ public:
    */
   FE_FaceQ (const unsigned int p);
 
-  /**
-   * Clone method.
-   */
-  virtual FiniteElement<1,spacedim> *clone() const;
+  virtual
+  std::unique_ptr<FiniteElement<1,spacedim>>
+                                          clone() const;
 
   /**
    * Return a string that uniquely identifies a finite element. This class
@@ -358,10 +359,9 @@ public:
    */
   FE_FaceP(unsigned int p);
 
-  /**
-   * Clone method.
-   */
-  virtual FiniteElement<dim,spacedim> *clone() const;
+  virtual
+  std::unique_ptr<FiniteElement<dim,spacedim> >
+  clone() const;
 
   /**
    * Return a string that uniquely identifies a finite element. This class
index 480b52e43eb6732dbb28150a105ed5af899a6a54..2b04620b76b994e1bd79ad402a122857c44f7a39 100644 (file)
@@ -268,7 +268,10 @@ public:
   get_constant_modes () const;
 
   virtual std::size_t memory_consumption () const;
-  virtual FiniteElement<dim> *clone() const;
+
+  virtual
+  std::unique_ptr<FiniteElement<dim,dim> >
+  clone() const;
 
 private:
   /**
index 8c98c12dc379845edea15bb94e9f6ac27a92339d..134f4d6029ebf026fb72d72317a2768d0451ae1c 100644 (file)
@@ -95,14 +95,8 @@ public:
   FE_Nothing (const unsigned int n_components = 1,
               const bool dominate = false);
 
-  /**
-   * A sort of virtual copy constructor. Some places in the library, for
-   * example the constructors of FESystem as well as the hp::FECollection
-   * class, need to make copied of finite elements without knowing their exact
-   * type. They do so through this function.
-   */
   virtual
-  FiniteElement<dim,spacedim> *
+  std::unique_ptr<FiniteElement<dim,spacedim> >
   clone() const;
 
   /**
index 85b46eaf7c51105a789732f480b0003afa53e576..7a14a369b195ae20a848b8e31594aadbb513e100 100644 (file)
@@ -265,7 +265,9 @@ public:
 
   virtual UpdateFlags requires_update_flags (const UpdateFlags flags) const;
 
-  virtual FiniteElement<2,2> *clone () const;
+  virtual
+  std::unique_ptr<FiniteElement<2,2>>
+                                   clone() const;
 
   /**
    * Destructor.
index 7c08e61e45b71e48059fa106fb16b39351e55542..0f17310c72b28543f44e8942194090b16f799af5 100644 (file)
@@ -586,6 +586,10 @@ public:
    */
   virtual std::string get_name () const;
 
+  virtual
+  std::unique_ptr<FiniteElement<dim,spacedim> >
+  clone() const;
+
   /**
    * Implementation of the corresponding function in the FiniteElement
    * class.  Since the current element is interpolatory, the nodal
@@ -597,15 +601,6 @@ public:
   void
   convert_generalized_support_point_values_to_nodal_values (const std::vector<Vector<double> > &support_point_values,
                                                             std::vector<double>                &nodal_values) const;
-
-protected:
-
-  /**
-   * @p clone function instead of a copy constructor.
-   *
-   * This function is needed by the constructors of @p FESystem.
-   */
-  virtual FiniteElement<dim,spacedim> *clone() const;
 };
 
 
index 20ac7c0720f17e9e4f35010717e0ab227c5c90af..901dcb94b5f66abb5efe40274d87552ff10a49e3 100644 (file)
@@ -142,13 +142,9 @@ public:
   virtual bool has_support_on_face (const unsigned int shape_index,
                                     const unsigned int face_index) const;
 
-protected:
-  /**
-   * @p clone function instead of a copy constructor.
-   *
-   * This function is needed by the constructors of @p FESystem.
-   */
-  virtual FiniteElement<dim,spacedim> *clone() const;
+  virtual
+  std::unique_ptr<FiniteElement<dim,spacedim> >
+  clone() const;
 
 private:
 
index 7bc73548bd623052cdab97b3a81a239f460ca3b6..0397e680aa025389883fbe9309386c1d56cef5cf 100644 (file)
@@ -294,13 +294,9 @@ public:
   virtual std::pair<Table<2,bool>, std::vector<unsigned int> >
   get_constant_modes () const;
 
-protected:
-  /**
-   * @p clone function instead of a copy constructor.
-   *
-   * This function is needed by the constructors of @p FESystem.
-   */
-  virtual FiniteElement<dim,spacedim> *clone() const;
+  virtual
+  std::unique_ptr<FiniteElement<dim,spacedim> >
+  clone() const;
 
 private:
 
index 6b956843e593201c6a26c237614c819dcf20b6aa..85a88ccd8c00fdbc5ed20037199c4599a69f6d07 100644 (file)
@@ -553,6 +553,10 @@ public:
    */
   virtual std::string get_name () const;
 
+  virtual
+  std::unique_ptr<FiniteElement<dim,dim> >
+  clone() const;
+
   /**
    * This function returns @p true, if the shape function @p shape_index has
    * non-zero function values somewhere on the face @p face_index.
@@ -688,14 +692,6 @@ public:
   virtual std::pair<Table<2,bool>, std::vector<unsigned int> >
   get_constant_modes () const;
 
-protected:
-  /**
-   * @p clone function instead of a copy constructor.
-   *
-   * This function is needed by the constructors of @p FESystem.
-   */
-  virtual FiniteElement<dim> *clone() const;
-
 private:
 
   /**
index 605d9ae6edb0e82f12c46221cb4a4c420e4f0151..2a2178683221d308d05faa78cc94b9d8fd18d368 100644 (file)
@@ -125,6 +125,10 @@ public:
    */
   virtual std::string get_name () const;
 
+  virtual
+  std::unique_ptr<FiniteElement<dim,spacedim> >
+  clone() const;
+
   /**
    * Implementation of the corresponding function in the FiniteElement
    * class.  Since the current element is interpolatory, the nodal
@@ -155,15 +159,6 @@ public:
   FiniteElementDomination::Domination
   compare_for_face_domination (const FiniteElement<dim,spacedim> &fe_other) const;
   //@}
-
-protected:
-
-  /**
-   * @p clone function instead of a copy constructor.
-   *
-   * This function is needed by the constructors of @p FESystem.
-   */
-  virtual FiniteElement<dim,spacedim> *clone() const;
 };
 
 
index c7739b9952ae88e807271ec12856499460254863..61940b750f16602b0f0b2ec62b593b4ae8c39a82 100644 (file)
@@ -65,7 +65,10 @@ public:
                     const unsigned int n_face_support_points = 2);
 
   virtual std::string get_name() const;
-  virtual FiniteElement<dim> *clone() const;
+
+  virtual
+  std::unique_ptr<FiniteElement<dim,dim> >
+  clone() const;
 
   // documentation inherited from the base class
   virtual
index ebcab3ef3c69dcffda30989ffca26ff09894860f..c82c9ec0d63a069f33246491919e0fdf473abddb 100644 (file)
@@ -117,6 +117,10 @@ public:
    */
   virtual std::string get_name () const;
 
+  // documentation inherited from the base class
+  virtual
+  std::unique_ptr<FiniteElement<dim,dim> >
+  clone() const;
 
   /**
    * This function returns @p true, if the shape function @p shape_index has
@@ -142,7 +146,6 @@ public:
   get_constant_modes () const;
 
   virtual std::size_t memory_consumption () const;
-  virtual FiniteElement<dim> *clone() const;
 
 private:
   /**
@@ -254,9 +257,11 @@ public:
    */
   virtual std::string get_name () const;
 
-  virtual FiniteElement<dim> *clone () const;
-
   // documentation inherited from the base class
+  virtual
+  std::unique_ptr<FiniteElement<dim,dim> >
+  clone() const;
+
   virtual
   void
   convert_generalized_support_point_values_to_nodal_values (const std::vector<Vector<double> > &support_point_values,
index 9e1870529bde75a325f0a5d86027b0ee55663885..56d813e2c4d6fc599cc779d92bc3776414ca386e 100644 (file)
@@ -443,6 +443,10 @@ public:
   virtual std::string get_name () const;
 
   // for documentation, see the FiniteElement base class
+  virtual
+  std::unique_ptr<FiniteElement<dim,spacedim> >
+  clone() const;
+
   virtual
   UpdateFlags
   requires_update_flags (const UpdateFlags update_flags) const;
@@ -871,14 +875,6 @@ public:
 
 protected:
 
-  /**
-   * @p clone function instead of a copy constructor.
-   *
-   * This function is needed by the constructors of @p FESystem.
-   */
-  virtual FiniteElement<dim,spacedim> *clone() const;
-
-
   virtual typename FiniteElement<dim,spacedim>::InternalDataBase *
   get_data (const UpdateFlags                                                    update_flags,
             const Mapping<dim,spacedim>                                         &mapping,
index 9c4fa554068846731b9ee3ed04695be5d89c0474..f44a6b62a9f5f7d7a83b2549fcf3b18cc02315a9 100644 (file)
@@ -51,13 +51,6 @@ public:
    */
   FE_TraceQ(unsigned int p);
 
-  /**
-   * @p clone function instead of a copy constructor.
-   *
-   * This function is needed by the constructors of @p FESystem.
-   */
-  virtual FiniteElement<dim,spacedim> *clone() const;
-
   /**
    * Return a string that uniquely identifies a finite element. This class
    * returns <tt>FE_DGQ<dim>(degree)</tt>, with <tt>dim</tt> and
@@ -65,6 +58,10 @@ public:
    */
   virtual std::string get_name () const;
 
+  virtual
+  std::unique_ptr<FiniteElement<dim,spacedim> >
+  clone() const;
+
   /**
    * This function returns @p true, if the shape function @p shape_index has
    * non-zero function values somewhere on the face @p face_index.
index 03fa7b26209cf9cb14d50bb8bc3d2256f08eb009..6bd42a1b9737d077e9393dbf1b6f3b48f310dbb5 100644 (file)
@@ -30,6 +30,8 @@
 
 #include <sstream>
 #include <iostream>
+#include <deal.II/base/std_cxx14/memory.h>
+
 
 //TODO: implement the adjust_quad_dof_index_for_face_orientation_table and
 //adjust_line_dof_index_for_line_orientation_table fields, and write tests
@@ -126,10 +128,10 @@ FE_ABF<dim>::get_name () const
 
 
 template <int dim>
-FiniteElement<dim> *
+std::unique_ptr<FiniteElement<dim,dim> >
 FE_ABF<dim>::clone() const
 {
-  return new FE_ABF<dim>(rt_order);
+  return std_cxx14::make_unique<FE_ABF<dim>>(rt_order);
 }
 
 
index 3b1909aadf918cc529c9ca97947d253a5bec51fe..f0e0e22dc864167b75b4d46f0693722b480a6ccb 100644 (file)
@@ -29,6 +29,7 @@
 
 #include <iostream>
 #include <sstream>
+#include <deal.II/base/std_cxx14/memory.h>
 
 
 DEAL_II_NAMESPACE_OPEN
@@ -114,10 +115,10 @@ FE_BDM<dim>::get_name () const
 
 
 template <int dim>
-FiniteElement<dim> *
+std::unique_ptr<FiniteElement<dim,dim> >
 FE_BDM<dim>::clone() const
 {
-  return new FE_BDM<dim>(*this);
+  return std_cxx14::make_unique<FE_BDM<dim>>(*this);
 }
 
 
index 68cbe82bff94a5728f1f24c4ca01a71399253425..1752c3c05f83de457b6326fa06572ca5d1b894ef 100644 (file)
@@ -26,6 +26,8 @@
 
 #include <vector>
 #include <sstream>
+#include <deal.II/base/std_cxx14/memory.h>
+
 
 DEAL_II_NAMESPACE_OPEN
 
@@ -315,10 +317,10 @@ FE_Bernstein<dim,spacedim>::get_name () const
 
 
 template <int dim, int spacedim>
-FiniteElement<dim,spacedim> *
+std::unique_ptr<FiniteElement<dim,spacedim> >
 FE_Bernstein<dim,spacedim>::clone() const
 {
-  return new FE_Bernstein<dim,spacedim>(*this);
+  return std_cxx14::make_unique<FE_Bernstein<dim,spacedim>>(*this);
 }
 
 
index 39c434cc9ff4e1fb4db8fbd95a3cb30736b9daed..ea914fb69bc4d8f0a00a81d15852f006ca991314 100644 (file)
@@ -20,6 +20,9 @@
 #include <deal.II/base/polynomials_nedelec.h>
 #include <deal.II/base/polynomials_raviart_thomas.h>
 
+#include <deal.II/base/std_cxx14/memory.h>
+
+
 DEAL_II_NAMESPACE_OPEN
 
 template <int dim, int spacedim>
index 657e93511a110b549d8690bfba507776327a5033..bf226c8ea4e284e98fa069ff8c1090c6c189ef9a 100644 (file)
@@ -18,6 +18,8 @@
 #include <deal.II/fe/fe_tools.h>
 
 #include <sstream>
+#include <deal.II/base/std_cxx14/memory.h>
+
 
 DEAL_II_NAMESPACE_OPEN
 
@@ -63,10 +65,10 @@ FE_DGP<dim,spacedim>::get_name () const
 
 
 template <int dim, int spacedim>
-FiniteElement<dim,spacedim> *
+std::unique_ptr<FiniteElement<dim,spacedim> >
 FE_DGP<dim,spacedim>::clone() const
 {
-  return new FE_DGP<dim,spacedim>(*this);
+  return std_cxx14::make_unique<FE_DGP<dim,spacedim>>(*this);
 }
 
 
index 2cbdf9d49d3541989d275b4d58a68590bd958717..2bd931a45e9b444b61d12ec2bdacc48b15b6111d 100644 (file)
@@ -18,6 +18,8 @@
 #include <deal.II/fe/fe_tools.h>
 
 #include <sstream>
+#include <deal.II/base/std_cxx14/memory.h>
+
 
 DEAL_II_NAMESPACE_OPEN
 
@@ -156,10 +158,10 @@ FE_DGPMonomial<dim>::get_name () const
 
 
 template <int dim>
-FiniteElement<dim> *
+std::unique_ptr<FiniteElement<dim,dim> >
 FE_DGPMonomial<dim>::clone() const
 {
-  return new FE_DGPMonomial<dim>(*this);
+  return std_cxx14::make_unique<FE_DGPMonomial<dim>>(*this);
 }
 
 
index 6caa4839cd2ba396084f31624125f457641cf8bf..112a870b142cf00d3aceb59be56d7347f1b77bb8 100644 (file)
@@ -24,6 +24,8 @@
 #include <deal.II/fe/fe_values.h>
 
 #include <sstream>
+#include <deal.II/base/std_cxx14/memory.h>
+
 
 DEAL_II_NAMESPACE_OPEN
 
@@ -114,10 +116,10 @@ FE_DGPNonparametric<dim,spacedim>::get_name () const
 
 
 template <int dim, int spacedim>
-FiniteElement<dim,spacedim> *
+std::unique_ptr<FiniteElement<dim,spacedim> >
 FE_DGPNonparametric<dim,spacedim>::clone() const
 {
-  return new FE_DGPNonparametric<dim,spacedim>(*this);
+  return std_cxx14::make_unique<FE_DGPNonparametric<dim,spacedim>>(*this);
 }
 
 
index 495cc48a92629d5bf8d58cc1236b3afcc526d9cf..7ff2c8bb95304aef5653782424bc0623bee6cc89 100644 (file)
@@ -24,6 +24,8 @@
 
 #include <iostream>
 #include <sstream>
+#include <deal.II/base/std_cxx14/memory.h>
+
 
 DEAL_II_NAMESPACE_OPEN
 
@@ -127,10 +129,10 @@ convert_generalized_support_point_values_to_nodal_values (const std::vector<Vect
 
 
 template <int dim, int spacedim>
-FiniteElement<dim,spacedim> *
+std::unique_ptr<FiniteElement<dim,spacedim> >
 FE_DGQ<dim, spacedim>::clone() const
 {
-  return new FE_DGQ<dim, spacedim>(*this);
+  return std_cxx14::make_unique<FE_DGQ<dim, spacedim>>(*this);
 }
 
 
@@ -808,7 +810,7 @@ convert_generalized_support_point_values_to_nodal_values (const std::vector<Vect
 
 
 template <int dim, int spacedim>
-FiniteElement<dim,spacedim> *
+std::unique_ptr<FiniteElement<dim,spacedim> >
 FE_DGQArbitraryNodes<dim,spacedim>::clone() const
 {
   // Construct a dummy quadrature formula containing the FE's nodes:
@@ -818,7 +820,7 @@ FE_DGQArbitraryNodes<dim,spacedim>::clone() const
     qpoints[i] = Point<1>(this->unit_support_points[lexicographic[i]][0]);
   Quadrature<1> pquadrature(qpoints);
 
-  return new FE_DGQArbitraryNodes<dim,spacedim>(pquadrature);
+  return std_cxx14::make_unique<FE_DGQArbitraryNodes<dim,spacedim>>(pquadrature);
 }
 
 
@@ -857,10 +859,10 @@ FE_DGQLegendre<dim,spacedim>::get_name () const
 
 
 template <int dim, int spacedim>
-FiniteElement<dim,spacedim> *
+std::unique_ptr<FiniteElement<dim,spacedim> >
 FE_DGQLegendre<dim,spacedim>::clone() const
 {
-  return new FE_DGQLegendre<dim,spacedim>(this->degree);
+  return std_cxx14::make_unique<FE_DGQLegendre<dim,spacedim>>(this->degree);
 }
 
 
@@ -912,10 +914,10 @@ FE_DGQHermite<dim,spacedim>::get_name () const
 
 
 template <int dim, int spacedim>
-FiniteElement<dim,spacedim> *
+std::unique_ptr<FiniteElement<dim,spacedim> >
 FE_DGQHermite<dim,spacedim>::clone() const
 {
-  return new FE_DGQHermite<dim,spacedim>(this->degree);
+  return std_cxx14::make_unique<FE_DGQHermite<dim,spacedim>>(this->degree);
 }
 
 
index cf492902ea32e10c73d9d09dfefba98f129e6cf4..b98f2e6e863b2b174c0bab6a0caf29d9bc686d23 100644 (file)
 
 
 #include <deal.II/fe/fe_enriched.h>
-
 #include <deal.II/fe/fe_tools.h>
 
+#include <deal.II/base/std_cxx14/memory.h>
+
+
 DEAL_II_NAMESPACE_OPEN
 
 namespace
@@ -236,7 +238,7 @@ FE_Enriched<dim,spacedim>::shape_value(const unsigned int   i,
 
 
 template <int dim, int spacedim>
-FiniteElement<dim,spacedim> *
+std::unique_ptr<FiniteElement<dim,spacedim> >
 FE_Enriched<dim,spacedim>::clone() const
 {
   std::vector< const FiniteElement< dim, spacedim > * > fes;
@@ -248,7 +250,9 @@ FE_Enriched<dim,spacedim>::clone() const
       multiplicities.push_back(this->element_multiplicity(i) );
     }
 
-  return new FE_Enriched<dim,spacedim>(fes, multiplicities, get_enrichments());
+  return std::unique_ptr<FE_Enriched<dim,spacedim>>(new FE_Enriched<dim,spacedim>(fes,
+                                                    multiplicities,
+                                                    get_enrichments()));
 }
 
 
index 8dde09d0c4311aacc503a91d79540db447119b32..d62e6f755de73041a885ef105ec8e67e30a8d158 100644 (file)
@@ -20,7 +20,9 @@
 #include <deal.II/fe/fe_tools.h>
 #include <deal.II/base/quadrature_lib.h>
 #include <deal.II/lac/householder.h>
+
 #include <sstream>
+#include <deal.II/base/std_cxx14/memory.h>
 
 DEAL_II_NAMESPACE_OPEN
 
@@ -102,10 +104,10 @@ FE_FaceQ<dim,spacedim>::FE_FaceQ (const unsigned int degree)
 
 
 template <int dim, int spacedim>
-FiniteElement<dim,spacedim> *
+std::unique_ptr<FiniteElement<dim,spacedim> >
 FE_FaceQ<dim,spacedim>::clone() const
 {
-  return new FE_FaceQ<dim,spacedim>(this->degree);
+  return std_cxx14::make_unique<FE_FaceQ<dim,spacedim>>(this->degree);
 }
 
 
@@ -329,10 +331,10 @@ FE_FaceQ<1,spacedim>::FE_FaceQ (const unsigned int degree)
 
 
 template <int spacedim>
-FiniteElement<1,spacedim> *
-FE_FaceQ<1,spacedim>::clone() const
+std::unique_ptr<FiniteElement<1,spacedim>>
+                                        FE_FaceQ<1,spacedim>::clone() const
 {
-  return new FE_FaceQ<1,spacedim>(this->degree);
+  return std_cxx14::make_unique<FE_FaceQ<1,spacedim>>(this->degree);
 }
 
 
@@ -527,10 +529,10 @@ FE_FaceP<dim,spacedim>::FE_FaceP (const unsigned int degree)
 
 
 template <int dim, int spacedim>
-FiniteElement<dim,spacedim> *
+std::unique_ptr<FiniteElement<dim,spacedim> >
 FE_FaceP<dim,spacedim>::clone() const
 {
-  return new FE_FaceP<dim,spacedim>(this->degree);
+  return std_cxx14::make_unique<FE_FaceP<dim,spacedim>>(this->degree);
 }
 
 
index c6e324a83a9200ef2ad2f68214cd9d97a91c5f14..d9c557968a36cfb354cdb6be0945946fd4764759 100644 (file)
 #include <deal.II/fe/fe_tools.h>
 #include <deal.II/lac/full_matrix.h>
 #include <deal.II/lac/vector.h>
+
 #include <sstream>
 #include <iostream>
+#include <deal.II/base/std_cxx14/memory.h>
 
 //TODO: implement the adjust_quad_dof_index_for_face_orientation_table and
 //adjust_line_dof_index_for_line_orientation_table fields, and write tests
@@ -207,10 +209,10 @@ FE_Nedelec<dim>::get_name () const
 
 
 template <int dim>
-FiniteElement<dim>
-*FE_Nedelec<dim>::clone () const
+std::unique_ptr<FiniteElement<dim,dim> >
+FE_Nedelec<dim>::clone () const
 {
-  return new FE_Nedelec<dim> (*this);
+  return std_cxx14::make_unique<FE_Nedelec<dim> >(*this);
 }
 
 //---------------------------------------------------------------------------
index 70953546071106a514e1e7ed5c45fd1049a28f47..1a3469528df48378e6cddb852b447a426b47ff58 100644 (file)
@@ -15,6 +15,7 @@
 
 
 #include <deal.II/fe/fe_nothing.h>
+#include <deal.II/base/std_cxx14/memory.h>
 
 DEAL_II_NAMESPACE_OPEN
 
@@ -48,10 +49,10 @@ FE_Nothing<dim,spacedim>::FE_Nothing (const unsigned int n_components,
 
 
 template <int dim, int spacedim>
-FiniteElement<dim,spacedim> *
+std::unique_ptr<FiniteElement<dim,spacedim> >
 FE_Nothing<dim,spacedim>::clone() const
 {
-  return new FE_Nothing<dim,spacedim>(*this);
+  return std_cxx14::make_unique<FE_Nothing<dim,spacedim>>(*this);
 }
 
 
index b2e10eab297939ea7f27ebd08ce0a241abf27790..8953d97d7da11c355d5d3a13466ca4b398248496 100644 (file)
@@ -15,6 +15,7 @@
 
 
 #include <deal.II/fe/fe_p1nc.h>
+#include <deal.II/base/std_cxx14/memory.h>
 
 DEAL_II_NAMESPACE_OPEN
 
@@ -64,9 +65,10 @@ UpdateFlags FE_P1NC::requires_update_flags (const UpdateFlags flags) const
 
 
 
-FiniteElement<2,2> *FE_P1NC::clone () const
+std::unique_ptr<FiniteElement<2,2>>
+                                 FE_P1NC::clone () const
 {
-  return new FE_P1NC(*this);
+  return std_cxx14::make_unique<FE_P1NC>(*this);
 }
 
 
index f0e272f4a4f6fe46d8f0fc97f98322a6434decce..339205589a03fe23861ac106be710b7fb4e8d694 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <vector>
 #include <sstream>
+#include <deal.II/base/std_cxx14/memory.h>
 
 DEAL_II_NAMESPACE_OPEN
 
@@ -157,10 +158,10 @@ convert_generalized_support_point_values_to_nodal_values (const std::vector<Vect
 
 
 template <int dim, int spacedim>
-FiniteElement<dim,spacedim> *
+std::unique_ptr<FiniteElement<dim,spacedim> >
 FE_Q<dim,spacedim>::clone() const
 {
-  return new FE_Q<dim,spacedim>(*this);
+  return std_cxx14::make_unique<FE_Q<dim,spacedim>>(*this);
 }
 
 
index 43453859bdfaf60432ad47cad0bde1f9fb22a9ab..e0102743bd3e0488034ec9513e9258f61bde13ee 100644 (file)
@@ -30,6 +30,7 @@
 
 #include <vector>
 #include <sstream>
+#include <deal.II/base/std_cxx14/memory.h>
 
 DEAL_II_NAMESPACE_OPEN
 
index 117244270fd9ba187d894470bd56ad8ad10ec713..c82b9cd83d412a810b1cdcfe11e7586a4217910c 100644 (file)
@@ -33,6 +33,7 @@
 #include <vector>
 #include <sstream>
 #include <memory>
+#include <deal.II/base/std_cxx14/memory.h>
 
 DEAL_II_NAMESPACE_OPEN
 
@@ -320,10 +321,10 @@ FE_Q_Bubbles<dim,spacedim>::get_name () const
 
 
 template <int dim, int spacedim>
-FiniteElement<dim,spacedim> *
+std::unique_ptr<FiniteElement<dim,spacedim> >
 FE_Q_Bubbles<dim,spacedim>::clone() const
 {
-  return new FE_Q_Bubbles<dim,spacedim>(*this);
+  return std_cxx14::make_unique<FE_Q_Bubbles<dim,spacedim>>(*this);
 }
 
 
index 6a6bc3c3e1209fcca931004eb38bce1012d6813c..da353cc0900523928c9dd94ce7ea202cf081a6a7 100644 (file)
@@ -25,6 +25,7 @@
 
 #include <vector>
 #include <sstream>
+#include <deal.II/base/std_cxx14/memory.h>
 
 DEAL_II_NAMESPACE_OPEN
 
@@ -166,10 +167,10 @@ FE_Q_DG0<dim,spacedim>::get_name () const
 
 
 template <int dim, int spacedim>
-FiniteElement<dim,spacedim> *
+std::unique_ptr<FiniteElement<dim,spacedim> >
 FE_Q_DG0<dim,spacedim>::clone() const
 {
-  return new FE_Q_DG0<dim,spacedim>(*this);
+  return std_cxx14::make_unique<FE_Q_DG0<dim,spacedim>>(*this);
 }
 
 
index fdd72b3b2284a775fdb5981ebb9e5c1654f71867..2e55a25841d59ac753be36d799f146d0379e8252 100644 (file)
@@ -19,6 +19,7 @@
 
 #include <cmath>
 #include <sstream>
+#include <deal.II/base/std_cxx14/memory.h>
 
 //TODO: implement the adjust_quad_dof_index_for_face_orientation_table and
 //adjust_line_dof_index_for_line_orientation_table fields, and write tests
@@ -125,10 +126,10 @@ FE_Q_Hierarchical<dim>::get_name () const
 
 
 template <int dim>
-FiniteElement<dim> *
+std::unique_ptr<FiniteElement<dim,dim> >
 FE_Q_Hierarchical<dim>::clone() const
 {
-  return new FE_Q_Hierarchical<dim>(*this);
+  return std_cxx14::make_unique<FE_Q_Hierarchical<dim>>(*this);
 }
 
 
index fdbf224aa57128c6260e5b5cef6da0a7d8fd6636..cbc1846276c464c63d031a179feec008b7564d8b 100644 (file)
@@ -21,6 +21,7 @@
 
 #include <vector>
 #include <sstream>
+#include <deal.II/base/std_cxx14/memory.h>
 
 DEAL_II_NAMESPACE_OPEN
 
@@ -92,10 +93,10 @@ convert_generalized_support_point_values_to_nodal_values (const std::vector<Vect
 
 
 template <int dim, int spacedim>
-FiniteElement<dim,spacedim> *
+std::unique_ptr<FiniteElement<dim,spacedim> >
 FE_Q_iso_Q1<dim,spacedim>::clone() const
 {
-  return new FE_Q_iso_Q1<dim,spacedim>(*this);
+  return std_cxx14::make_unique<FE_Q_iso_Q1<dim,spacedim>>(*this);
 }
 
 
index 8b1b8e7bfcc446f22de1f7e52d82f45daa4a1026..3c897f828680b83fa26f3a43fe128a632be9df86 100644 (file)
@@ -20,6 +20,7 @@
 #include <algorithm>
 
 #include <sstream>
+#include <deal.II/base/std_cxx14/memory.h>
 
 
 DEAL_II_NAMESPACE_OPEN
@@ -70,9 +71,10 @@ std::string FE_RannacherTurek<dim>::get_name() const
 
 
 template <int dim>
-FiniteElement<dim> *FE_RannacherTurek<dim>::clone() const
+std::unique_ptr<FiniteElement<dim,dim> >
+FE_RannacherTurek<dim>::clone() const
 {
-  return new FE_RannacherTurek<dim>(this->order, this->n_face_support_points);
+  return std_cxx14::make_unique<FE_RannacherTurek<dim>>(this->order, this->n_face_support_points);
 }
 
 
index 7964b5a6ada9e54a80c99e43d046af53376c8e2b..f24c03a00bd963618713b036d4a528daa84273fb 100644 (file)
@@ -30,6 +30,7 @@
 
 #include <sstream>
 #include <iostream>
+#include <deal.II/base/std_cxx14/memory.h>
 
 //TODO: implement the adjust_quad_dof_index_for_face_orientation_table and
 //adjust_line_dof_index_for_line_orientation_table fields, and write tests
@@ -122,10 +123,10 @@ FE_RaviartThomas<dim>::get_name () const
 
 
 template <int dim>
-FiniteElement<dim> *
+std::unique_ptr<FiniteElement<dim,dim> >
 FE_RaviartThomas<dim>::clone() const
 {
-  return new FE_RaviartThomas<dim>(*this);
+  return std_cxx14::make_unique<FE_RaviartThomas<dim>>(*this);
 }
 
 
index d59735c24f61c109df6916630eb00bdfba4521a3..ff145a40b8478a764fc65aa84cf8868d19a84d61 100644 (file)
@@ -27,6 +27,7 @@
 #include <deal.II/fe/fe_tools.h>
 
 #include <sstream>
+#include <deal.II/base/std_cxx14/memory.h>
 
 
 DEAL_II_NAMESPACE_OPEN
@@ -119,10 +120,10 @@ FE_RaviartThomasNodal<dim>::get_name () const
 
 
 template <int dim>
-FiniteElement<dim> *
+std::unique_ptr<FiniteElement<dim,dim> >
 FE_RaviartThomasNodal<dim>::clone() const
 {
-  return new FE_RaviartThomasNodal<dim>(*this);
+  return std_cxx14::make_unique<FE_RaviartThomasNodal<dim>>(*this);
 }
 
 
index 04d6bba6292524a6200e9c4513b11370ea55ff55..6d346ac0b6d6da8abdcdfa582af45fb2a6419cc5 100644 (file)
@@ -25,6 +25,7 @@
 #include <deal.II/fe/fe_tools.h>
 
 #include <sstream>
+#include <deal.II/base/std_cxx14/memory.h>
 
 
 DEAL_II_NAMESPACE_OPEN
@@ -319,7 +320,7 @@ FESystem<dim,spacedim>::get_name () const
 
 
 template <int dim, int spacedim>
-FiniteElement<dim,spacedim> *
+std::unique_ptr<FiniteElement<dim,spacedim> >
 FESystem<dim,spacedim>::clone() const
 {
   std::vector< const FiniteElement<dim,spacedim>* >  fes;
@@ -330,7 +331,7 @@ FESystem<dim,spacedim>::clone() const
       fes.push_back( & base_element(i) );
       multiplicities.push_back(this->element_multiplicity(i) );
     }
-  return new FESystem<dim,spacedim>(fes, multiplicities);
+  return std_cxx14::make_unique<FESystem<dim,spacedim>>(fes, multiplicities);
 }
 
 
@@ -1477,9 +1478,7 @@ void FESystem<dim,spacedim>::initialize (const std::vector<const FiniteElement<d
         {
           clone_base_elements += Threads::new_task ([ &,i,ind] ()
           {
-            base_elements[ind]
-              = std::make_pair (std::unique_ptr<FiniteElement<dim,spacedim>>(fes[i]->clone()),
-                                multiplicities[i]);
+            base_elements[ind] = { fes[i]->clone(), multiplicities[i] };
           });
           ++ind;
         }
index 16cbb037761b6cfa58cd14c71b8dde57fecd5bd2..dee1e7f8699906f5c4af6842016293eb1ad28ef4 100644 (file)
@@ -26,6 +26,7 @@
 #include <sstream>
 #include <fstream>
 #include <iostream>
+#include <deal.II/base/std_cxx14/memory.h>
 
 DEAL_II_NAMESPACE_OPEN
 
@@ -64,10 +65,10 @@ FE_TraceQ<dim,spacedim>::FE_TraceQ (const unsigned int degree)
 
 
 template <int dim, int spacedim>
-FiniteElement<dim,spacedim> *
+std::unique_ptr<FiniteElement<dim,spacedim> >
 FE_TraceQ<dim,spacedim>::clone() const
 {
-  return new FE_TraceQ<dim,spacedim>(this->degree);
+  return std_cxx14::make_unique<FE_TraceQ<dim,spacedim>>(this->degree);
 }
 
 

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.